2013-10-24 33 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

只要看看它的文檔。如果沒有,請閱讀其定義。 (提示:它可能還沒有任何這肯定**不可能**渲染變量「不可用」我想這是像'((無效)(表達));' – 2013-10-24 21:24:06

+0

@ H2CO3:......可能吧重新聲明'var'使任何後續使用含糊不清?'extern qUnusedType var;' – MSalters

+1

@ H2CO3:正確,它並不是那麼神奇 – lpapp

回答

24

否在許多情況下(例如只是路過一個簡單的變量到宏)。該定義是內部qglobal.h

# define Q_UNUSED(x) (void)x; 

要禁用未使用的變量警告。你可以在這個宏之後使用這個變量而沒有任何問題。

然而,如果你傳遞一個表達式或別的東西的宏和編譯器來計算表達式它可能有副作用

+2

唯一的副作用,我所看到的,是移植工作,如果你從Qt的切換了,但不是一個大問題,因爲你反正會有更多問題。 – lpapp

相關問題