【问题标题】:Why I get errors when I try to out a compiler defined macro using a pragma message?当我尝试使用编译指示消息输出编译器定义的宏时,为什么会出现错误?
【发布时间】:2011-01-28 17:57:08
【问题描述】:

如果我使用以下代码,我想知道为什么 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

【问题讨论】:

    标签: visual-studio preprocessor pragma


    【解决方案1】:

    我认为#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 输出窗格中的消息并转到其文件/行。)

    【讨论】:

      猜你喜欢
      • 2013-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 2021-12-28
      相关资源
      最近更新 更多