2010-05-19 7 views
6

Ho appena trovato l'esistenza di qt_noop() definisco nella qglobal.h come:Qual è lo scopo di `qt_noop` ​​

inline void qt_noop() {} 

Qual è il punto di esso?

+0

+1 Per la domanda ... – mosg

+0

* noop * - * no op * - Nessuna operazione –

+0

Precisamente! Perché preoccuparsi di creare una funzione che ... nulla! – gregseth

risposta

8

Lo so che è utilizzato internamente in alcune macro che dovrebbero fare qualcosa solo per build di debug, ad esempio:

# ifndef QT_NO_DEBUG 
# define Q_ASSERT(cond) ((!(cond)) ? qt_assert(#cond,__FILE__,__LINE__) : qt_noop()) 
# else 
# define Q_ASSERT(cond) qt_noop() 
# endif 
#endif 
+0

Quindi il suo unico scopo è usare l'operatore ternario (perché non un singolo se?) Poiché potrebbe essere omesso nella seconda definizione? – gregseth

+3

Non può essere omesso in 2a definizione. La macro Q_ASSERT viene solitamente utilizzata come normale chiamata di funzione, ad esempio 'Q_ASSERT (xxx == yyy);'. Quindi la macro deve espandersi al codice che può essere seguito con punto e virgola senza errori/avvertimenti. Per quanto riguarda il "singolo se", ci sono alcuni problemi con le macro che contengono se sono usati all'interno di altre istruzioni if ​​senza parentesi (vedi http://www.parashift.com/c++-faq-lite/misc-technical-issues. html # faq-39.4), quindi l'operatore ternario potrebbe essere un'idea migliore qui. – chalup

+0

Accettato più per il commento e il link rispetto alla risposta ... comunque, grazie! :) – gregseth