VC++宏定义##运算符
VC++ macro definition ## operator
我正在尝试将我们的解决方案从 VS2010 移植到 VS2017,并且在涉及令牌粘贴运算符的宏定义中遇到了这个编译错误。下面是代码
#include “stdafx.h”
#define TEST_MACRO(str) \
{ \
_T(“Error”) ## str ## _T(“\””); \
}
int main()
{
TEST_MACRO(“ check “);
return 0;
}
这在 VS2010 中编译良好但在 VS2017/VS2015 中失败。它似乎无法识别 str ## 后面的 _T(“\”)。我正在使用“多字节字符集”,因此 _T(x) 解析为 x(在 tchar.h 中)。
谁能帮我理解这个问题?
它更有可能卡在左边的双升号上,因为它试图连接右括号和 str
以生成标记。您是否尝试删除它?
#define TEST_MACRO(str) { _T(“Error”) str ## _T(“\””); }
您不需要 ##
。连接字符串文字是没有意义的。
"foo" "bar" "baz"
等同于 "foobarbaz"
.
试试这个变体:
#define TEST_MACRO(str) \
{ \
_T("Error") _T(str) _T("\""); \
}
使用 ##
连接字符串,编译器看起来像:_T("Error")" check "_T("\"")
。 " check "_T
在这里是个问题。它是一个用户定义的文字_T
,它是未定义的
我正在尝试将我们的解决方案从 VS2010 移植到 VS2017,并且在涉及令牌粘贴运算符的宏定义中遇到了这个编译错误。下面是代码
#include “stdafx.h”
#define TEST_MACRO(str) \
{ \
_T(“Error”) ## str ## _T(“\””); \
}
int main()
{
TEST_MACRO(“ check “);
return 0;
}
这在 VS2010 中编译良好但在 VS2017/VS2015 中失败。它似乎无法识别 str ## 后面的 _T(“\”)。我正在使用“多字节字符集”,因此 _T(x) 解析为 x(在 tchar.h 中)。
谁能帮我理解这个问题?
它更有可能卡在左边的双升号上,因为它试图连接右括号和 str
以生成标记。您是否尝试删除它?
#define TEST_MACRO(str) { _T(“Error”) str ## _T(“\””); }
您不需要 ##
。连接字符串文字是没有意义的。
"foo" "bar" "baz"
等同于 "foobarbaz"
.
试试这个变体:
#define TEST_MACRO(str) \
{ \
_T("Error") _T(str) _T("\""); \
}
使用 ##
连接字符串,编译器看起来像:_T("Error")" check "_T("\"")
。 " check "_T
在这里是个问题。它是一个用户定义的文字_T
,它是未定义的