Получение предупреждений компиляции для объявлений, не являющихся прототипами - PullRequest
2 голосов
/ 12 января 2012

В C объявления функций могут быть объявлениями-прототипами или не-прототипами.Например, рассмотрим следующую минимальную программу:

int foo (); /* non-prototype declaration */

int bar (void); /* prototype declaration */

int main (int argc, char **argv)
{
  return 0;
}

Хотя в C99 объявления, не относящиеся к прототипам, являются устаревшими, я не могу заставить GCC жаловаться на них.Например, компиляция вышеупомянутой программы с GCC и всеми включенными ошибками завершается успешно:

$ gcc -std=c99 -pedantic -Werror -Wall test.c
$

Есть ли способ убедить GCC выдавать предупреждения для объявлений функций, которые не являются прототипами?

(Вопрос вдохновлен ответом Китом Томпсоном .)

Ответы [ 2 ]

4 голосов
/ 12 января 2012

Я думаю, что вы ищете вариант -Wstrict-prototypes

1 голос
/ 12 января 2012

Обратите внимание, что gcc с параметрами -std=c99 -pedantic -Wall не выдает никаких предупреждений для объявлений функций старого стиля, но C не требует от реализации выдачи диагностики при наличии объявлений функций старого стиля.

C характеризует использование объявления функции старого стиля как устаревшее с C89, но оно все еще является допустимым кодом C (в C89 / C99 / C11).

...