2010-02-19 18 views
7

ho il seguente codice:#WARNING e valutazione 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 

Il problema è che LIMIT_DATE non viene valutato quando si stampa l'avviso.

Ho cercato su Google, ma non ho ancora trovato la soluzione.

Grazie per l'aiuto.

+0

Su GNU? Lo fa in MSVC. Le macro non espandono i loro argomenti macro e non vedo un modo per farlo funzionare nel modo desiderato. – GManNickG

+0

Per quello che vale, puoi semplicemente "#define LIMIT_DATE" 01-03-2010 "'. Penso che sia illegale scappare fuori da una stringa. – GManNickG

risposta

5

From gcc preprocessor documentation

Né #error né #warning macro-espande sua tesi. Le sequenze di spazi bianchi interne sono sostituite da con un unico spazio. La riga deve costituita da token completi. È il più saggio per rendere l'argomento di queste direttive una costante di stringa singola ; questo evita problemi con gli apostrofi e simili.

Quindi non è possibile almeno in gcc.

Secondo MSDN questo dovrebbe funzionare per MSVC althrough Non ho accesso a Visual Studio attualmente per testare questo