当我尝试使用pragma消息尝试输出编译器定义的宏时,为什么会出错?

时间:2010-03-17 19:38:34

标签: visual-studio preprocessor pragma

我想知道为什么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

1 个答案:

答案 0 :(得分: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) )

(旁注,这允许

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

允许您双击VS输出窗格中的消息并将其转到其文件/行。)