2013-10-24 7 views
15

Учитывая следующий фрагмент кода:Имеет ли Q_UNUSED какие-либо побочные эффекты?

void test(int var) 
{ 
    Q_UNUSED(var); 
#ifdef SOMETHING 
    printf("%d",var); 
    //do something else with var... 
#endif 
} 

Будет ли Q_UNUSED макрос иметь никакого эффекта, если я на самом деле использовать переменную «Var» в каком-то сценарии (как в примере выше), или это не имеет никакого эффекта когда я подавляю предупреждения компилятора для неиспользуемых переменных?

До сих пор я наблюдаю, что это не имеет никакого эффекта, но я хотел бы убедиться.

+0

Просто ознакомьтесь с его документацией. Если их нет, прочитайте его определение. (подсказка: она, вероятно, не имеет никакого значения.Это, безусловно, ** не может ** сделать переменную «непригодной». Я думаю, что это что-то вроде '((void) (выражение)),' –

+0

@ H2CO3: redeclare 'var', чтобы любое последующее использование было неоднозначным?' extern qUnusedType var; ' – MSalters

+1

@ H2CO3: правильно, это не так уж и волшебно. – lpapp

ответ

24

Во многих случаях нет (например, просто передать переменную макросу). Определение внутри qglobal.h:

# define Q_UNUSED(x) (void)x; 

Чтобы отключить неиспользуемые переменные предупреждения. Вы можете использовать переменную после этого макроса без каких-либо проблем.

Однако, если вы передаете выражение или что-то еще в макрос, а компилятор должен оценить выражение, оно может иметь побочные эффекты .

+2

Единственный побочный эффект, который я вижу, - это усилия по переносу, если вы переключаетесь с Qt, но это не имеет большого значения, так как вы в любом случае будет больше проблем. – lpapp

Смежные вопросы