Objective-C如何编译?

use*_*845 9 c compiler-construction runtime objective-c

我只是很好奇,Objective-C是否编译成C代码或者Objective-C运行时是否像程序上方的抽象层一样工作?如果我不知道我在说什么,请提前抱歉!

uli*_*ess 14

一点历史课:

C++和Objective C最初都是作为C的预处理器开始的.所以你输入了你的ObjC代码,它会有效地对代码进行搜索和替换,并将Objective-C命令转换为使用了一点点的直接C代码辅助库(objc/runtime.h和类似文件中的东西).

随着语言变得越来越复杂,它变成了一个完整的解析器,它将C编译器中的解析器替换为/扩展为Objective-C特定的解析器.因此尽管将Objective-C编译成直接C是完全可能的,但是当前的ObjC编译器不再那样做了.


Mer*_*ede 8

将Objective-C编译为C没有意义,因为它需要解析C代码并进行编译.

Objective-C编译成机器代码.请记住,语言(Objective-C,C,C++)仅定义了正确编写代码的规则.编译器检查您的代码是否正确并编译它,即将其转换为可执行代码.

另外,不要混淆Objective-C语言和Objective-C运行时.语言定义语法,运行时允许编译的代码运行(在某种程度上,就像你说的那样,它是一个层,但每次使用你的程序都不会编译).

编辑:
运行时实现计算机语言的核心行为.运行时以类似于库的方式包含已编译的函数代码.例如,在C中,当您调用printf()代码时,编译成机器代码并包含该函数实现的库链接 ; 这个机器代码的作用是将参数传递给库中的可执行代码.