递归宏传播的结果是什么?

时间:2014-01-08 19:52:24

标签: c++ c macros

#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“,世界”)=“你好,世界”

1 个答案:

答案 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;
}