Objective-C源代码和clang -rewrite-objc C ++代码之后有什么关系?

时间:2019-03-16 15:35:39

标签: c++ objective-c clang

当我编写一些Objective-C源代码时,可以使用clang -rewrite-objc FILENAME.m将此代码转换为C ++源代码。 C ++源代码和原始Objective-C源代码之间是什么关系?

Objective-C是C(但不是C ++)的超集,那么为什么可以将Objective-C转换为C ++,而不是C?在编译,链接并在iOS或macOS上运行Objective-C代码时,它是否已预编译为C ++,然后进行链接等等?

1 个答案:

答案 0 :(得分:1)

Objective-C仍可以转换为直C。 ObjC运行时API中没有任何需要C ++的东西,尽管这些内脏都是在C ++中实现的。我认为这没有改变。但是,重写器可能仅由于生成C ++而已,因为这是生成最方便/最有效的目标。

Xcode的构建过程中没有翻译步骤。它编译 native Objective-C代码;也就是说,ObjC直接转换为编译器用来生成可执行文件的临时格式,就像C ++,C和编译器本身支持的任何其他语言一样。

该转换器明确存在,因为Visual Studio中没有Objective-C编译器。在重写器之前,使用了不同的编译器将ObjC代码编译为Windows上的库,然后将这些库与在Visual Studio中编译的代码结合起来以生成最终的应用程序。

它可以工作,但是调试真的非常复杂,因为无法从单个调试器调试在两种代码生成样式之间移动的任何调用堆栈!