Objective c 每个目标C程序都转换成C代码吗?

Objective c 每个目标C程序都转换成C代码吗?,objective-c,c,Objective C,C,既然Objective-C基本上是C的扩展,那么代码在编译为本机代码之前是否会转换为纯C代码 如果是这样,转换是在RAM上进行的,还是由编译器在磁盘上创建包含C代码的临时文件,然后由C编译器进一步编译为本机代码?否,Objective-C直接编译到assembler(假设为GCC).Objective-C语法是C语法的扩展并不意味着它不能有自己的编译器。C++是相同的方式-它的语法与C兼容(无论如何,大多数情况下),但是它有自己的一套工具。C、C++、Objul-C编译器可以重用部分的预处理、句

既然Objective-C基本上是C的扩展,那么代码在编译为本机代码之前是否会转换为纯C代码


如果是这样,转换是在RAM上进行的,还是由编译器在磁盘上创建包含C代码的临时文件,然后由C编译器进一步编译为本机代码?

否,Objective-C直接编译到assembler(假设为GCC).Objective-C语法是C语法的扩展并不意味着它不能有自己的编译器。C++是相同的方式-它的语法与C兼容(无论如何,大多数情况下),但是它有自己的一套工具。C、C++、Objul-C编译器可以重用部分的预处理、句法分析和代码生成,但不需要顺序地运行它们(例如Objul-C==C==>目标代码)。编译器也不再使用人类可读的汇编语言(这种情况也存在很长时间)。

但是,应该有一些原因来说明在Objective C中哪些类被实现为C结构。@AmoghtalPalikar:这是什么意思?如果你看一下苹果的文档,目标C中类的对象基本上是指向某些C结构的指针。对于eg,id实际上是objc_obj*的类型定义。这个结构有一个isa指针,告诉你它属于哪个类,以及其他关于它的信息。因此,如果一切都归结为纯C代码,它会被转换为中间C代码吗?如果不是在磁盘上,它可能在内存中?@AmoghtalPalikar:类的内存表示形式可能与C结构的内存表示形式相同,但没有生成中间C代码。GCC中的C、C++和Objy-C编译器是非常复杂的,但是都是直接生成汇编程序的。可能的副本是No.2,因为我知道没有JM和Objc代码的VM编译到字节码。请阅读我对拉斯曼答案的评论。但是答案必须与他们告诉你代码是如何编译的相同。对不起,事实上,当我回答你的问题时,我没有阅读他们的答案。