目标C - 为什么不@interface,@imp...@end行尾需要一个分号?另外,还有其他情况是这种情况吗?



我知道"@"符号是用来显示Objective-C关键字的,但我不明白为什么有些关键字需要分号,而有些则不需要。

也就是,据我所见;@interface、@implementation和@end不需要分号

@interface EditorPrintView ()
@property  ImageDocument* editorDoc;
@property  NSColor* backgroundColor;
@property BOOL paginate;
@property CGFloat scale;
@end
@class ImageController;
@implementation EditorPrintView
...
@end

有人知道这是为什么吗?如果这只是历史的产物,那么我会买它,但我无法创建一个好的搜索查询来找到任何答案。

我们只能推测Objective-C的设计者Brad Cox的动机。(我想我们也可以试着联系他…)

我相信Brad Cox最初实现Objective-C是作为一个预处理器,以一种相当直接的方式将Objective-C转换成普通的C。如果不需要分号,编写预处理器可能会更容易。

例如,请记住,@interface后面可以跟一个用大括号括起来的声明块,例如

@interface MyObject : NSObject {
    int _count;
    IBOutlet NSView *_view;
}
...
@end

也许通过不允许在@interface声明后使用分号来编写处理这个可选块的预处理器更容易。

同样,由于@-声明不是普通C语言的一部分,也许Brad Cox选择将它们更像C预处理器的#-指令一样对待,这些指令(在Objective-C发明的时候)由预处理器处理,不需要(或者通常甚至允许)分号。所以@interface@end就像#if#endif

现在,以任何一种方式编写编译器(允许或不允许分号)可能都是微不足道的,但现在没有理由改变语言的这一部分。

对于其他不需要分号的指令:有@protocol声明,还有@optional@required@public@private@package@protected

相关内容

最新更新