我正在读参考计数方面的clang文档,上面写着“在目标C中默认情况下,ARC并不是例外安全的”。它接着说:
可以用选项
-fobjc-arc-exceptions来编译程序,以便启用这些程序,或者使用选项-fno-objc-arc-exceptions显式地禁用它们,并使用最后这样的参数“with”。在Objective++中,默认启用了-fobjc-arc-exceptions。
我很好奇。是否有其他编译器选项在Objective和Objective++之间进行默认更改?
补充问题:在Objective++模式(*.mm文件)中编译纯Objective代码,而不是只在Objective模式(*.m)编译纯Objective代码有什么区别?
发布于 2013-03-08 16:53:41
最好的方法是记录clang将从所有c++语言中输出的内容。
以下是我从obj-c++编译中得到的一些信息
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系列文件进行尝试,以确定这些文件的默认选项是什么。
希望它能帮到你。
发布于 2013-03-08 15:51:24
要回答问题的第二部分:如果您以Objective模式而不是Objective++模式编译文件,那么静态分析器[1]将提供更好的支持。我相信编译器一般也会生成更准确的警告(不使用静态分析器),但我无法找到/记住该信息的来源。
https://stackoverflow.com/questions/15296057
复制相似问题