首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clang的哪些编译选项改变了目标C和目标C++之间的默认设置?

clang的哪些编译选项改变了目标C和目标C++之间的默认设置?
EN

Stack Overflow用户
提问于 2013-03-08 14:18:57
回答 2查看 1.9K关注 0票数 4

我正在读参考计数方面的clang文档,上面写着“在目标C中默认情况下,ARC并不是例外安全的”。它接着说:

可以用选项-fobjc-arc-exceptions来编译程序,以便启用这些程序,或者使用选项-fno-objc-arc-exceptions显式地禁用它们,并使用最后这样的参数“with”。在Objective++中,默认启用了-fobjc-arc-exceptions

我很好奇。是否有其他编译器选项在Objective和Objective++之间进行默认更改?

补充问题:在Objective++模式(*.mm文件)中编译纯Objective代码,而不是只在Objective模式(*.m)编译纯Objective代码有什么区别?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-08 16:53:41

最好的方法是记录clang将从所有c++语言中输出的内容。

以下是我从obj-c++编译中得到的一些信息

代码语言:javascript
复制
clang++ -fobjc-arc main.mm -v

/.../
-fblocks 
-fobjc-runtime=macosx-10.7.0 
-fobjc-dispatch-method=mixed 
-fobjc-default-synthesize-properties 
-fobjc-arc 
-fobjc-arc-cxxlib=libstdc++ 
-fobjc-arc-exceptions 
-fobjc-exceptions 
-fcxx-exceptions 
-fexceptions 
-fdiagnostics-show-option 
-fcolor-diagnostics 
   /.../

如您所见,根据编译位置的不同,这些输出可能会有所不同。但其中有些是常量。

您应该对不同的c系列文件进行尝试,以确定这些文件的默认选项是什么。

希望它能帮到你。

票数 3
EN

Stack Overflow用户

发布于 2013-03-08 15:51:24

要回答问题的第二部分:如果您以Objective模式而不是Objective++模式编译文件,那么静态分析器[1]将提供更好的支持。我相信编译器一般也会生成更准确的警告(不使用静态分析器),但我无法找到/记住该信息的来源。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15296057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档