kin*_*cos 5 c++ objective-c clang
当我编写一些 Objective-C 源代码时,我可以使用clang -rewrite-objc FILENAME.m将此代码转换为 C++ 源代码。C++源代码和原来的Objective-C源代码有什么关系?
Objective-C 是 C 的超集(但不是 C++),那么为什么 Objective-C 可以翻译为 C++,而不是 C?当 Objective-C 代码在 iOS 或 macOS 上编译、链接和运行时,是否会预编译为 C++,然后链接等等?
Objective-C 仍然可以直接转换为 C。ObjC 运行时 API 中没有任何东西需要 C++,尽管内部结构到处都是用 C++ 实现的。我认为这没有改变。然而,重写器可能只是生成 C++,因为这是最方便/最有效的生成目标。
Xcode 的构建过程中没有翻译步骤。它编译原生Objective-C 代码;也就是说,ObjC 直接转换为编译器用来生成可执行文件的临时格式,就像 C++、C 和编译器本机支持的任何其他语言一样。
翻译器显式存在,因为 Visual Studio 中没有 Objective-C 编译器。在重写器之前,使用不同的编译器将 ObjC 代码编译到 Windows 上的库中,然后将这些库与 Visual Studio 中编译的代码组合起来以生成最终应用程序。
它有效,但调试确实非常复杂,因为在两种代码生成样式之间行走的任何调用堆栈都无法从单个调试器进行调试!