2010-05-19 10 views
6

Ich habe gerade die Existenz von qt_noop() definieren im qglobal.h als:Was ist der Zweck der `qt_noop` ​​

inline void qt_noop() {} 

Was ist der Sinn davon?

+0

+1 Für die Frage ... – mosg

+0

* noop * - * keine op * - Keine Operation. –

+0

Genau! Warum sollte ich eine Funktion erstellen, die ... nichts macht? – gregseth

Antwort

8

Ich weiß, dass es intern in einigen Makros verwendet wird, die nur etwas tun sollten, für Debug, zum Beispiel baut:

# 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

Sein einziger Zweck ist es, den ternären Operator zu verwenden (warum nicht ein einziges wenn?), Da es in der zweiten Definition weggelassen werden könnte? – gregseth

+3

Es kann nicht in der 2. Definition weggelassen werden. Das Makro Q_ASSERT wird normalerweise wie ein normaler Funktionsaufruf verwendet, d.h. 'Q_ASSERT (xxx == yyy);'. Daher muss das Makro zu Code erweitert werden, der mit Semikolon ohne Fehler/Warnungen verfolgt werden kann. Was das "single if" betrifft, gibt es einige Probleme mit Makros, die enthalten, wenn sie in anderen if-Anweisungen ohne Klammern verwendet werden (siehe http://www.parashift.com/c++faq-lite/misc-technical-issues). html # faq-39.4), so könnte hier ein ternärer Operator eine bessere Idee sein. – chalup

+0

Akzeptiert mehr für den Kommentar und den Link als die Antwort ... trotzdem, danke! :) – gregseth