2010-05-19 7 views
6

Je viens de découvrir l'existence de qt_noop() DEFINE dans le qglobal.h comme:Quel est le but de `qt_noop` ​​

inline void qt_noop() {} 

Quel est le point de celui-ci?

+0

+1 Pour la question ... – mosg

+0

* noop * - * pas * op - Pas d'opération. –

+0

Précisément! Pourquoi se fout de créer une fonction qui ne ... rien! – gregseth

Répondre

8

Je sais qu'il est utilisé en interne dans certaines macros qui devraient faire quelque chose que pour debug, par exemple:

# 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

Donc son seul but est d'utiliser l'opérateur ternaire (pourquoi pas un seul si?) Puisqu'il pourrait être omis dans la 2ème définition? – gregseth

+3

Il ne peut pas être omis dans 2nd define. La macro Q_ASSERT est généralement utilisée comme appel de fonction normale, c'est-à-dire 'Q_ASSERT (xxx == yyy);'. La macro doit donc être développée en code pouvant être suivi avec un point-virgule sans erreurs/avertissements. Comme pour le "single if", il y a quelques problèmes avec les macros contenant si elles sont utilisées dans d'autres instructions if sans accolades (voir http://www.parashift.com/c++-faq-lite/misc-technical-issues). html # faq-39.4), donc l'opérateur ternaire pourrait être une meilleure idée ici. – chalup

+0

Accepté plus pour le commentaire et le lien que la réponse ... de toute façon, merci! :) – gregseth