2010-02-19 43 views
7

我有以下代碼:#warning後和宏觀評價

#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 

的問題是,在打印時顯示警告LIMIT_DATE未評估。

我搜索谷歌,但並沒有發現尚未解決。

感謝您的幫助。

+0

在GNU?它在MSVC中。宏不會擴展它們的宏觀參數,而且我也沒有看到以這種方式按照你想要的方式工作。 – GManNickG

+0

對於它的價值,你可以做'#定義LIMIT_DATE「2010年1月3日」'。我認爲從字符串外面逃跑是非法的。 – GManNickG

回答

5

From gcc preprocessor documentation

既不#ERROR也不#warning後 宏觀擴展其參數。內部 空白序列分別置換 爲單個空格。該行必須有 由完整的令牌組成。它是最明智 使這些 指令的自變量是單個字符串 常數;這避免了與撇號等有關的問題。

所以這是不可能的,至少在海灣合作委員會。

根據MSDN這個應該MSVC工作g雖然我沒有訪問到Visual Studio目前測試這個