【发布时间】:2014-01-13 04:55:28
【问题描述】:
我刚刚花了一些时间找出为什么可变集合没有正确地与自身相交 与另一组,使用
[someMutableSet intersectsSet:anotherSet]; // not the best idea
当然,正确的语法是[someMutableSet intersectSet:anotherSet],而上面一行的含义有所不同——它是一个返回值为BOOL类型的方法调用。
由于我启用了-Wall -Wextra 选项,因此应该将其视为警告。 但没有被抓到。我通过尝试进一步调查,其中types 是NSMutableSet:
(void)[types intersectsSet:types]; // -> no warning, this is expected
(BOOL)[types intersectsSet:types]; // (1) -> warning, this is expected
再一次,如果我这样做:
[types intersectsSet:types]; // (2) -> no warning, UNEXPECTED
没有警告,即使该方法被定义为- (BOOL)intersectsSet:(NSSet *)otherSet;,所以人们会期望 (1) 和 (2) 是等价的。也许恶意编译工具认为 (1) 与 (2) 相比具有更危险的性质,但我问为什么这会影响警告?
那么,如何让编译器在 (2) 中产生与 (1) 中相同的警告?
【问题讨论】:
-
编译器为
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)(即当前Xcode) -
您在 (1) 中看到了什么警告?我倾向于说编译器默认情况下不会担心未使用的返回类型,除非您显式转换它。
标签: objective-c xcode clang compiler-warnings unused-variables