MyTetra Share
Делитесь знаниями!
Что обозначает "пустое" выражение приведения к типу void некоторой переменной?
Время создания: 27.03.2024 17:01
Текстовые метки: язык, c++, Си++, C, Си, тип, приведение, void, переменная, неиспользуемая, qt, Q_UNUSED, выражение, предупреждение, компилятор
Раздел: Компьютер - Программирование - Язык C++ (Си++)
Запись: xintrea/mytetra_syncro/master/base/1711548082gor447lx09/text.html на raw.github.com

Иногда в коде C/C++ программы можно встретить странное выражение, в котором присходит приведение переменной к типу void, но данное значение ни к чему не присваивается. Код выглядит примерно так:



bool myFunction(void **args, void *ptr, int x, size_t linearSize) {

(void)args;

(void)ptr;

(void)x;


// ... Какое-то вычисление и возврат из функции ...

if(linearSize>0)

return true;

else

return false;

}



Вопрос в том, зачем нужны вот эти строки, которые, на первый взгляд выглядят бессмысленно:



(void)args

(void)ptr;

(void)x;



Ответ в том, что эти выражения подавляют в компиляторе вывод предупреждений о том, что некоторые переменные в функции/методе не используются. Программист как бы говорит компилятору: "Я знаю, что я эти переменные не использую. Да, так и должно быть".


Такая ситуация может возникнуть, например, если библиотека работает с функциями обратного вызова, которые должны иметь строго определенный прототип. Но при написании этой функции не все переменные нужны для работы, а интерфейс требует, чтобы они были. Вот в такой ситуации и может возникнуть необходимость в вышеуказанных конструкциях.


Кстати, в фреймверке Qt есть макрос Q_UNUSED(x), который разворачивается следующим образом:



#define Q_UNUSED(x) (void)x;



То есть, по-сути просто используется тот же самый принцип.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования