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

200
24 февраля 2018, 21:55

Доброго времени суток!

Подскажите пожалуйста, читаю книгу Герба Саттера, и он пишет такой код:

int a = 10;
a; //для подавления предупреждения о неиспользуемой переменной

Вопрос: для чего подавлять это предупреждение? Разве это на что то повлияет?

Answer 1

К сожалению, информация в этой книге явно устарела. Подавление предупреждения о неиспользованной переменной (или параметре) путем написания выражения, где кроме этой переменной ничего нет, приведет к появлению предупреждений а бесполезном выражении.

Для подавления предупреждения раньше следовало использовать приведение переменной к void: static_cast<void>(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
}
Answer 2

Исправлю ответ, а то по комментариям не понятно.

  1. Да, компилятор её не отбросит из бинарного кода в том случае если установлены соответствующие настройки оптимизации.

  2. Если вы используете gcc то, воспользуйтесь флагом -Wunused-*, он покажет что в коде есть неиспользуемая переменная - этот флаг входит в флаг -Wall

READ ALSO
Win10 Virtual desktop в отдельном окне

Win10 Virtual desktop в отдельном окне

Есть ли способ отобразить созданный рабочий стол(win+tab->создать раб стол) в масштабируемом окнеЦель - создать приложение в котором будет второй...

197
visual C++ и Linux? Оно надо или забить? [требует правки]

visual C++ и Linux? Оно надо или забить? [требует правки]

В общем до поступления осталось еще пару месяцев и я думаю - может освоить visual C++Вроде как С++ нативный для Linux

182
Внедрение бинов через аннотации Java

Внедрение бинов через аннотации Java

Здравствуйте, появился вопрос по поводу аннотаций, к примеру у меня в IOC контейнере есть бин:

169
Semaphore на примитивных функциях Java

Semaphore на примитивных функциях Java

Задача - написать семафор без utilconcurrent

218