#include <iostream>
#define help(a) #a
#define xhelp(a) help(a)
#define glue(a,b) a##b
#define xglue(a,b) glue(a,b)
#define HIGHLOW "hello"
#define LOWLOW ",world"
int main()
{
std::cout<<xhelp(xglue(HIGH,LOW))<<std::endl;
return 0;
}
这是我的测试代码。我想知道MACOR xglue(HIGH,LOW)的传播。
对我而言,我认为结果是“你好”
但我从一个网站上学习,结果是“你好,世界”。
我真的很困惑。
我的代码的结果是“你好”。
有人可以帮我吗?
我认为xgule(HIGH,LOW)=胶水(HIGH,LOW)= HIGHLOW =“你好”
网站显示xglue(HIGH,LOW)=胶水(HIGH,LOW“,世界”)=“你好,世界”
答案 0 :(得分:0)
首先,没有递归宏。
示例中的大部分工作由两个预处理器运算符#
和##
执行。
#
是一个一元运算符,它将其参数转换为字符串文字。
##
是一个二元运算符,它将两个标记粘贴在一起形成一个标记。
检查给定预处理器代码扩展到的最简单方法实际上是运行预处理器。 g++
编译器有一个-E
选项可以完全实现。
# Assuming your file is saved as code.cpp
$ g++ -E code.cpp
... lots of output ...
int main()
{
std::cout<<"\"hello\""<<std::endl;
return 0;
}