Следующий файл foo.c
- это упрощенная версия более тонкой ошибки, которую я нашел в своем коде.
int b;
void bar(int a);
void foo(int a)
{
bar(a);
a = 42;
}
Строка a = 42
на самом деле является опечаткой в моем коде: Я имел в виду b = 42
. Я не ожидаю, что компилятор обнаружит, что я допустил опечатку, но я хотел бы получить предупреждение о том, что я присваиваю локальную переменную (или параметр функции), которая больше не будет использоваться. Если я скомпилирую этот файл с
% gcc-4.6 -Wall -Wextra -pedantic -O3 -c foo.c
я не получу абсолютно никакого предупреждения. Просмотр сгенерированного кода показывает, что присваивание a = 42
не выполняется, так что gcc
прекрасно понимает, что эта инструкция бесполезна (следовательно, потенциально ошибочна). Комментирование вызова bar(a);
выдает предупреждение warning: parameter 'a' set but not used [-Wunused-but-set-parameter]
, так что похоже, что gcc
не будет предупреждать, пока a
используется где-то в функции, даже если это перед присвоением.
Мои вопросы:
bar
.)