clang的哪些编译选项在Objective C和Objective C++之间有默认的差异?

4
我正在阅读clang reference counting documentation,其中提到“在Objective-C中,默认情况下ARC不支持异常”。接着它说:

可以使用选项-fobjc-arc-exceptions编译程序以启用这些功能,或使用选项-fno-objc-arc-exceptions明确禁用它们,最后一个参数“获胜”。 在Objective-C++中,默认情况下启用-fobjc-arc-exceptions

我很感兴趣。除了Objective-C和Objective-C++之间默认的选项之外,还有其他的编译器选项吗?
补充问题:使用Objective-C++模式(*.mm文件)而不是仅使用Objective-C模式(*.m),纯Objective-C代码的编译有何区别?

你应该查看文档,或者向LLVM开发人员提出问题。 - vonbrand
2个回答

3

最好的方法是记录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系列文件中进行测试,以确定它们各自的默认选项。

希望这能对您有所帮助。


0
回答你问题的第二部分:如果你使用Objective-C模式编译文件,而不是Objective-C++模式,那么你将得到更好的静态分析器支持[1]。我相信编译器也会生成更准确的警告(在不使用静态分析器的情况下),但我找不到或者记不起这些信息的来源。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接