2010-02-19 16 views
7

Tengo el siguiente código:#warning y evaluación macro

#define LIMIT_DATE \"01-03-2010\" 

#ifdef LIMIT_DATE 
    #if _MSC_VER 
     #pragma message ("Warning : this release will expire on " LIMIT_DATE) 
    #elif __GNUC__ 
     #warning ("Warning : this release will expire on " LIMIT_DATE) 
    #endif 
#endif 

El problema es que LIMIT_DATE no se evalúa cuando se imprime el aviso.

He buscado en Google, pero no he encontrado la solución.

Gracias por la ayuda.

+0

en GNU? Lo hace en MSVC. Las macros no expanden sus argumentos de macro, y no veo una manera de hacer que esto funcione de la manera que desee. – GManNickG

+0

Por lo que vale, simplemente puede hacer '#define LIMIT_DATE" 01-03-2010 "'. Creo que es ilegal escapar fuera de una cadena. – GManNickG

Respuesta

5

From gcc preprocessor documentation

Ni #error ni #WARNING macro-amplía su argumento. Las secuencias internas de espacio se reemplazan cada una por con un solo espacio. La línea debe consiste en tokens completos. Es el más prudente hacer que el argumento de estas directivas sea una cadena única constante; esto evita problemas con los apóstrofes y similares.

Así que no es posible al menos en gcc.

Según MSDN esto debería funcionar para MSVC Aun siendo no tengo acceso a la actualidad Visual Studio para probar esta