#cpp
Доброго времени суток! Подскажите пожалуйста, читаю книгу Герба Саттера, и он пишет такой код: int a = 10; a; //для подавления предупреждения о неиспользуемой переменной Вопрос: для чего подавлять это предупреждение? Разве это на что то повлияет?
Ответы
Ответ 1
К сожалению, информация в этой книге явно устарела. Подавление предупреждения о неиспользованной переменной (или параметре) путем написания выражения, где кроме этой переменной ничего нет, приведет к появлению предупреждений а бесполезном выражении. Для подавления предупреждения раньше следовало использовать приведение переменной к void: static_cast(a); (обычно обoрачивается в макрос типа UNUSED_VAR). В этом случае никаких предупреждений не последует. В современном С++ появился способ отметить переменную как специально неиспользованную. Для этих целей предусмотрен стандартный аттрибут maybe_unused: [[maybe_unused]] int a = 10;. И в этом случае никаких предупреждений не будет. Подавлять это предупреждение имеет смысл только в одном случае, когда имеется функция, результат который нельзя игнорировать, но мы намеренно хотим это сделать: [[nodiscard]] int foo(void){ return 0; } int main() { foo(); // warning: result of foo is not used int a = foo(); // warning: unused variable a [[maybe_unsed]] int a = foo(); // no warnings } Ответ 2
Исправлю ответ, а то по комментариям не понятно. Да, компилятор её не отбросит из бинарного кода в том случае если установлены соответствующие настройки оптимизации. Если вы используете gcc то, воспользуйтесь флагом -Wunused-*, он покажет что в коде есть неиспользуемая переменная - этот флаг входит в флаг -Wall
Комментариев нет:
Отправить комментарий