我对LLVM 4.1特别好奇,但也会对其他编译器的行为感兴趣。
根据GCC documentation(LLVM至少部分支持),unused
属性具有以下行为:
This attribute, attached to a variable, means that the variable is meant to be possibly unused. GCC will not produce a warning for this variable.
如果编译器能够警告您未使用的参数和变量,可能已经知道哪些参数和变量未被使用而不必告诉它(特别是因为unused
属性仅指示变量可能未使用过)。因此,unused
属性是否允许编译器执行任何其他优化,或者其目的只是为了允许更可读的代码?另外,如果unused
属性实际上允许编译器执行其他优化,那么如果您实际上最终使用指定为unused
的参数或变量会发生什么? LLVM(在XCode中)似乎没有抱怨这种情况,尽管我可能没有在正确的优化级别编译或启用了正确的警告。
答案 0 :(得分:6)
__attribute__((unused))
无法帮助优化,并不意味着该值必然未使用。它会抑制警告(如果出现此警告的原因,即,如果值确实未使用),那就是全部。