Ran*_*eis 6 c compatibility objective-c superset
我听说过Objective-C是C的正确超集,但是客观的C 2.0?
我问的原因是它不是,或者我误解了"正确的超集"这个短语,因为这段代码是有效的C语法:
#import <stdio.h>
int main () {
char *nil = "hello";
printf("%s\n",nil);
}
Run Code Online (Sandbox Code Playgroud)
但是不能在Objective-C 2.0中编译.显然,这是一个容易解决的问题,但我正在写一篇论文,并认为这是应该指出的.
bbu*_*bum 14
nil不是关键字. nil在objc.h中定义[在Mac OS X上](__DARWIN_NULL实际上只是NULL):
#ifndef nil
#define nil __DARWIN_NULL /* id of Nil instance */
#endif
Run Code Online (Sandbox Code Playgroud)
也就是说,nil它实际上不是编译语言的一部分,而是编译过程中使用的由系统库延续的约定.
显然,分裂的头发.不过,你真的可以编译Objective-C源代码nil.
它类似于问"我可以编写一个deflate在仍然使用zlib.h接口的情况下命名变量的工具吗?".当然.但它会很难看.
而且,事实上,该编译器不会自动包括objc.h.这个:
#include <stdio.h>
int main() {
int nil = 5;
fprintf(stdout, "Hello %d\n", nil);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
一旦删除导入Foundation的预编译/前缀头,因此在标准的Foundation工具项目(在main.m中)中编译并运行得很好,因此,objc.h.(所以,是的,开箱即用,Xcode模板确实导致objc.h通过导入Cocoa/Cocoa.h或导入导入Foundation/Foundation.h.)