Gcc-предупреждения: определены, но не используются vs unused variable

Всякий раз, когда я компилирую свой код, я наблюдаю следующие два предупреждения:

warning: '<variable>' defined but not used
warning: unused variable '<variable>'
</variable></variable>

Я попробовал google, но я не нашел ни одного полезного потока или блога о том, в чем разница между этими двумя предупреждениями.

Пример с фрагментом кода фрагмента кода для меня или для дублирования существующего потока, пожалуйста, не стесняйтесь ссылаться.

1 ответ

Я думаю, что разница немного тонкая, но вот фрагмент кода вместе с выходом компилятора, который демонстрирует некоторые отличия:

#include <iostream>
static const char * hello = "Hello";
void foo() {
 int i;
 std::cout << "foo" << std::endl;
}
...
argenet@Martell ~ % g++ /tmp/def_not_used.cpp -Wall
/tmp/def_not_used.cpp: In function ‘void foo()’:
/tmp/def_not_used.cpp:6:9: warning: unused variable ‘i’ [-Wunused-variable]
 int i;
 ^
/tmp/def_not_used.cpp: At global scope:
/tmp/def_not_used.cpp:3:21: warning: ‘hello’ defined but not used [-Wunused-variable]
 static const char * hello = "Hello";
</iostream>

Итак, локальная переменная никогда не используется, поэтому компилятор может просто опустить ее при генерации кода и выдает предупреждение "неиспользуемая переменная".

В то же время статический литерал C-стиля не может быть легко пропущен, поскольку он доступен для более широкой области (весь файл .cpp). Однако на этот код не ссылаются никакие коды в этом модуле, поэтому компилятор предупреждает об этом как "определенные, но не используемые".

licensed under cc by-sa 3.0 with attribution.