7

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

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

4

3 回答 3

6

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

于 2012-09-10T20:43:14.203 回答
3

这有什么好担心的吗?

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

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

于 2012-09-10T21:13:48.473 回答
1

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

于 2020-03-09T03:41:34.387 回答