C++预处理错误代码
问题描述:
#include "iostream"
#include "string"
using namespace std;
#define AA(bb) \
string(::##bb);
int main (int argc, char *argv[])
{
AA(aa);
}
这给了我一堆错误,但我想了解这个错误:C++预处理错误代码
pre.cpp:11:1: error: pasting "::" and "aa" does not give a valid preprocessing token
任何想法?
答
::
已经是一个单独的令牌,您不需要##
令牌粘贴操作符为您显示的代码。
答
删除##字符,因为它们在这种情况下是不允许的。 ##是连接位来创建一个标记,但::应该是一个标记,无论bb应该是另一个单独的标记。
答
由于在范围内没有符号aa
,所以您的代码没什么意义。也许你试图将参数串联到你的宏?如果是这样,你想要的是:
#define AA(bb) string(#bb)
这则转换AA(aa)
到string("aa")