typedef的重新定义是C11功能

时间:2012-09-10 20:15:26

标签: objective-c ios

我正在尝试创建一个头文件:

#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,它似乎很好用。

3 个答案:

答案 0 :(得分:6)

您必须在其他地方声明RevealBlock,因为除了UIKit / UIKit.h之外我没有看到任何导入,请检查项目.pch文件是否存在冲突标题(或者可能是您删除了一些标题以缩短代码段吗?)。

答案 1 :(得分:3)

  

这有什么值得担心的吗?

如果您正在编译C或ObjC程序且编译器不支持C11,则编译器应拒绝该程序(例如,您或使用您的程序的某人可能正在使用GCC 4.2-Apple / LLVM)。请注意,C ++多年来一直支持多种定义。

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

答案 2 :(得分:0)

对于Xcode 11,将“ C语言方言”构建选项更改为“ gnu11”或“编译器默认”。