2010-05-19 17 views
6

acabo de encontrar la existencia de qt_noop() defino en el qglobal.h como:¿Cuál es el propósito de `qt_noop` ​​

inline void qt_noop() {} 

Cuál es el punto de la misma?

+0

+1 Para la pregunta ... – mosg

+0

* noop * - * no * op - No operacion. –

+0

¡Exactamente! ¿Por qué dar un maldito crear una función que no ... nada! – gregseth

Respuesta

8

Sé que es utilizado internamente en algunos macros que debe hacer algo sólo para depuración se basa, por ejemplo:

# 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

Entonces, su único propósito es usar el operador ternario (¿por qué no un solo si?) Ya que podría omitirse en la 2da definición? – gregseth

+3

No se puede omitir en 2nd define. La macro Q_ASSERT generalmente se usa como una llamada a función normal, es decir 'Q_ASSERT (xxx == yyy);'. Entonces la macro debe expandirse al código que puede seguirse con punto y coma sin ningún error/advertencia. En cuanto al "single if", hay algunos problemas con las macros que contienen if cuando se usan dentro de otras sentencias if sin llaves (ver http://www.parashift.com/c++faq-lite/misc-technical-issues). html # faq-39.4), por lo que el operador ternario podría ser una mejor idea aquí. – chalup

+0

Aceptado más por el comentario y el enlace que la respuesta ... de todos modos, ¡gracias! :) – gregseth

Cuestiones relacionadas