C++代码中的预处理错误
#include "iostream"
#include "string"
using namespace std;
#define AA(bb) \
string(::##bb);
int main (int argc, char *argv[])
{
AA(aa);
}
这给了我很多错误,但我试图理解这个错误:
pre.cpp:11:1: 错误:粘贴“::”和“aa”不会给出有效的预处理标记
有什么想法吗?
#include "iostream"
#include "string"
using namespace std;
#define AA(bb) \
string(::##bb);
int main (int argc, char *argv[])
{
AA(aa);
}
This gives me a bunch of errors but I am trying to understand this error:
pre.cpp:11:1: error: pasting "::" and "aa" does not give a valid preprocessing token
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
::
已经是一个单独的令牌,您显示的代码不需要##
令牌粘贴运算符。::
is already a separate token, you don't need the##
token-pasting operator for the code you showed.删除 ## 字符,因为在此上下文中不允许使用它们。 ## 是连接位以形成令牌,但是 :: 应该是一个令牌,而 bb 应该是另一个单独的令牌。
Remove the ## characters as they are not allowed in this context. ## is to concatenate bits to make a token, but :: should be one token and whatever bb is should be another, separate, token.
您的代码没有什么意义,因为范围内没有符号
aa
。也许您试图将宏的参数字符串化?如果是这样,您想要的是:然后将
AA(aa)
转换为string("aa")
Your code makes little sense as there is no symbol
aa
in scope. Perhaps you trying to stringify the argument to your macro? If so, what you want is:This would then convert
AA(aa)
tostring("aa")