que ifdef example comando c++ c-preprocessor

c++ - ifdef - ifndef c example



"#Ifdef" dentro de una macro (5)

Posible duplicado:
#ifdef dentro de #define

¿Cómo uso con éxito el carácter "#" dentro de una macro? Grita cuando hago algo así:

#define DO(WHAT) / #ifdef DEBUG / MyObj->WHAT() / #endif /


Grita porque no puedes hacer eso.

Sugiero lo siguiente como alternativa:

#ifdef DEBUG #define DO(WHAT) MyObj->WHAT() #else #define DO(WHAT) #endif


No puedes hacer eso. Tienes que hacer algo como esto:

#ifdef DEBUG #define DO(WHAT) MyObj->WHAT() #else #define DO(WHAT) do { } while(0) #endif

El do { } while(0) evita las declaraciones vacías. Vea esta pregunta , por ejemplo.


Parece que lo que quieres hacer se puede lograr de esta manera, sin tener problemas:

#ifdef DEBUG # define DO(WHAT) MyObj->WHAT() #else # define DO(WHAT) while(false) #endif

Por cierto, mejor use la macro NDEBUG , a menos que tenga una razón más específica para no hacerlo. NDEBUG se NDEBUG más ampliamente como una macro que significa no depuración. Por ejemplo, la macro de NDEBUG estándar se puede desactivar definiendo NDEBUG . Tu código se convertiría en:

#ifndef NDEBUG # define DO(WHAT) MyObj->WHAT() #else # define DO(WHAT) while(false) #endif


Puedes hacer lo mismo así:

#ifdef DEBUG #define DO(WHAT) MyObj->WHAT() #else #define DO(WHAT) #endif


Qué tal si:

#ifdef DEBUG #define DO(WHAT) MyObj->WHAT() #else #define DO(WHAT) #endif