gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:03:29 26 4
gpt4 key购买 nike

当我编写一些 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 中编译的代码结合起来以生成最终的应用程序。

它奏效了,但是调试真的非常复杂,因为无法从单个调试器调试在两种代码生成样式之间行走的任何调用堆栈!

关于c++ - Objective-C 源代码和 clang -rewrite-objc C++ 代码之后有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55198496/

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