【问题标题】:Syntax error in Macro expansion宏扩展中的语法错误
【发布时间】:2012-05-20 20:07:56
【问题描述】:

如果定义了 unicode,则 TEXT("x") 宏如何扩展为 L"x",如果未定义 unicode,则扩展为 "x",因为当我尝试编译以下代码时,它会显示“错误 #1049:语法错误在宏参数中。”

#define T("x") "x"

int main()
{
}

【问题讨论】:

  • 上面的代码即使编译了也不会做任何事情;这里的意图是什么?

标签: c++ c macros


【解决方案1】:

在您的安装中查找 tchar.h 标头。你会得到如下内容:

#define __T(x)      L ## x

在 Unicode 模式下,上述宏将 L 和字符串参数粘贴在一起。在 ASCII 模式下,没有要粘贴的前缀,所以它很简单:

#define __T(x)      x

请注意,您通过另一个宏——_T()(带有单个下划线)间接调用此宏,并将字符串文字作为参数传递。

【讨论】:

    【解决方案2】:
    #define T("x") "x"
    

    这定义了一个宏函数T,如果没有任何引号,那将是一个名为x 的参数。你可以试试这样的:

    #define T(x) #x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2016-11-12
      相关资源
      最近更新 更多