gpt4 book ai didi

c - Objective-C 2.0 是 C 的适当超集吗?

转载 作者:太空狗 更新时间:2023-10-30 03:40:00 25 4
gpt4 key购买 nike

我听说 Objective-C 是 C 的超集,但 Objective-C 2.0 是吗?

我问的原因是它不是,或者我误解了短语“适当的超集”,因为这段代码是有效的 C 语法:

#import <stdio.h>

int main () {
char *nil = "hello";
printf("%s\n",nil);
}

但不能在 Objective-C 2.0 中编译。显然,这是一个很容易解决的问题,但我正在写论文,觉得这是应该指出的。

最佳答案

nil 不是关键字。 nilobjc.h [在 Mac OS X 上] 中定义(而 __DARWIN_NULL 实际上只是 NULL):

#ifndef nil
#define nil __DARWIN_NULL /* id of Nil instance */
#endif

也就是说,nil 并不是编译语言的一部分,而是编译期间使用的约定,由系统库永久保留。

显然是 split 的头发。不过,您确实可以在没有nil 的情况下编译 Objective-C 源代码。

这类似于问“我可以编写一个工具,它的变量名为 deflate,同时仍然使用 zlib.h 接口(interface)吗?”。当然。但是会很难看。

而且,事实上,编译器不会自动包含 objc.h。这:

#include <stdio.h>

int main() {
int nil = 5;
fprintf(stdout, "Hello %d\n", nil);
return 0;
}

一旦删除了导入 Foundation 的预编译/前缀 header ,就可以在标准 Foundation 工具项目(在 main.m 中)中编译和运行得很好,因此,objc.h。 (所以,是的,开箱即用,Xcode 模板确实导致objc.h 通过导入Cocoa/Cocoa.hFoundation/Foundation.h。)

关于c - Objective-C 2.0 是 C 的适当超集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com