2013-10-24 16 views
15

Dato il seguente pezzo di codice:Q_UNUSED ha effetti collaterali?

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

Sarebbe il Q_UNUSED macro ha alcun effetto se io in realtà uso la variabile 'var' in qualche scenario (come nell'esempio di cui sopra), o non ha alcun effetto a tutti quando sopprimo gli avvisi del compilatore per le variabili non utilizzate?

Finora osservo che non ha alcun effetto, ma mi piacerebbe esserne sicuro.

+0

Basta dare un'occhiata alla sua documentazione. Se non ce n'è, leggi la sua definizione. (suggerimento: probabilmente non ce n'è nessuna, sicuramente ** non può ** rendere una variabile "inutilizzabile". Immagino sia qualcosa come '((void) (espressione));' –

+0

@ H2CO3: non potrebbe redeclare 'var' per rendere ambiguo ogni altro uso?' extern qUnusedType var; ' – MSalters

+1

@ H2CO3: corretto, non è magico. – lpapp

risposta

24

No in molti casi (ad esempio, basta passare una variabile semplice alla macro). La definizione è all'interno qglobal.h:

# define Q_UNUSED(x) (void)x; 

Per disattivare inutilizzati variabili avvertimenti. È possibile utilizzare la variabile dopo questa macro senza alcun problema.

Tuttavia, se si passa un'espressione o qualcos'altro alla macro e il compilatore deve valutare l'espressione, potrebbe avere effetti collaterali .

+2

L'unico effetto collaterale, posso vedere, è lo sforzo di porting se passi da Qt, ma non è un grosso problema da quando avrebbe comunque più problemi. – lpapp

Problemi correlati