Я только что провел некоторое время выяснить, почему изменяемый набор не правильно пересекаться себя с другим набором, используяСтранное поведение предупреждения -Wunused-значения
[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)?
Компилятор 'Яблоко LLVM версии 5.0 (лязг-500.2.79) (на основе LLVM 3.3svn)' (текущий Xcode, то есть) –
Какое предупреждение в (1) вы видите? Я склоняюсь к утверждению, что компилятор не беспокоится о неиспользуемом типе возвращаемого значения по умолчанию, если вы явно его не выбрали. – Jessedc