2012-09-10 26 views
5

我試圖創建一個頭文件這樣:重新定義的typedef是C11的功能

#import <UIKit/UIKit.h> 

typedef void (^RevealBlock)(); 

@interface BFTasksViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate> { 
@private 
    RevealBlock _revealBlock; 
} 

- (id)initWithTitle:(NSString *)title withRevealBlock:(RevealBlock)revealBlock; 

@end 

但我得到這樣的警告:

的typedef重新定義「RevealBlock」是C11功能

這是要擔心的事嗎?我在看GHSidebarNav project,這似乎使用它很好。

回答

5

您必須聲明RevealBlock別的地方,因爲我沒有看到比的UIKit/UIKit.h其他任何進口,檢查你的項目.pch文件衝突的報頭(或那也許是因爲你刪除了一些頭使片段更短?)。

+1

謝謝!所以我用它在應用程序委託的頭文件中,我認爲這就是觸發警告的原因。相反,我將定義移至.pch文件並刪除了所有其他定義。 – joslinm

3

這是要擔心的事嗎?

如果您編譯C或ObjC程序和編譯器不支持C11,那麼編譯器應該拒絕的程序(GCC 4.2蘋果/ LLVM作爲一個例子您或使用您的程序可能是冒用) 。請注意,C++多年來一直支持多種定義。

當然,出現在多個文件中的這些定義必須始終與您將它們用作相同類型的位置相匹配。否則,編譯器可能會在調用之前錯誤地設置參數。