Подтвердить что ты не робот

Что такое флаг -Wsomething для предупреждений "метод метода не найден"?

Недавно у меня был случай, когда кто-то добавил параметр к методу init и разбил еще один проект, который поделился кодом. Поскольку это только предупреждение, никто не понял, что приложение было сломано, поэтому я пытаюсь превратить только это предупреждение в ошибку:

warning: instance method '-someMethod' not found (return type defaults to 'id')

Я обнаружил, что вы можете передать -Werror = foo в Other C Flags компилятору в Xcode, чтобы включить предупреждение в ошибку, но я не могу найти, что должно быть "foo". Я пробовал "uneclared-selectors", но это только ловит случаи @selector. Я пробовал -Werror-implicit-function-declaration, но это, похоже, тоже не поймает этот случай.

Я искал "inst-method-not-found" и "instance-method-not-found" после обнаружения "warn_inst_method_not_found" во время случайного поиска огромного исходного текста clang.

Справка...?

Update: Вот пример, который вы можете скомпилировать (например, в CodeRunner), чтобы увидеть предупреждение: https://gist.github.com/4045701

4b9b3361

Ответ 1

Вы можете выбрать -Werror=objc-method-access. Clang явно сообщает вам это прямо в предупреждающем сообщении, если вы загружаете и компилируете этот текст, который вы опубликовали:

% clang test.m -c
test.m:13:21: warning: instance method '-initWithNum:' not found (return type
      defaults to 'id') [-Wobjc-method-access]
  ...theObj = [[MyClass alloc] initWithNum: [NSNumber numberWithInt: 15]];
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 warning generated.

% clang test.m -Werror=objc-method-access -c  // ta-da!

Но в реальных ситуациях я согласен со всеми комментариями выше: вы должны исправлять или пресекать все предупреждения компилятора. Ваша сборка должна строиться чисто все время. В противном случае, как вы так правильно заметили, вы не сможете отличить настоящие ошибки от "обычного спама".

FWIW, здесь версия Clang, которую я использую:

$ clang --version
clang version 3.2  (http://llvm.org/git/llvm 1503aba4a036f5394c7983417bc1e64613b2fc77)
Target: x86_64-apple-darwin12.2.0
Thread model: posix