2012-09-10 27 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++多年来一直支持多种定义。

当然,出现在多个文件中的这些定义必须始终与您将它们用作相同类型的位置相匹配。否则,编译器可能会在调用之前错误地设置参数。