Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Неиспользуемые переменные

#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

Комментариев нет:

Отправить комментарий