2010-03-17 38 views
0

我想知道爲什麼在Visual C++編譯器讓我一個警告/錯誤,如果我使用下面的代碼:爲什麼我在使用編譯指示消息嘗試編譯器定義的宏時出錯?

#pragma message("You have " _MSC_FULL_VER) 

這裏是我所得到的:

error C2220: warning treated as error - no 'object' file generated 
warning C4081: expected ':'; found ')' 

問題再現了_MSC_FULL_VER_MSV_VER,但如果我嘗試使用其他類似__FILE____DATE__則不適用。

這些宏定義,它們都記錄在msdn

回答

3

我覺得#pragma message只需要C字符串。 IIRC,_MSC_FULL_VER是一個數字,而__FILE____DATE__是C字符​​串。試試這個

// BEWARE! Untested macro hackery ahead! 
#define STRINGIFY(L)  #L 
#define MAKESTRING(M, L) M(L) 
#define STRINGIZE(X)   MAKESTRING(STRINGIFY, X) 
#pragma message("You have " STRINGIZE(_MSC_FULL_VER)) 

(在一個側面說明,這允許在VS的輸出窗口上的消息

#define SHOWORIGIN   __FILE__ "(" STRINGIZE(__LINE__) "): " 
#pragma message(SHOWORIGIN "your message here") 

它允許你雙擊並採取了文件/行。)

相關問題