当前位置:  开发笔记 > 编程语言 > 正文

使用预处理器宏组成另一个宏调用

如何解决《使用预处理器宏组成另一个宏调用》经验,为你挑选了1个好方法。

假设我有一个C++预处理器宏定义如下:

#define X(s) std::cout << #s

如果我直接使用它:

int main() {
    X( hello );
}

它按预期工作,并在控制台上打印"hello".

如果我定义另一个调用它的宏:

#define Y X( hello )
#define X(s) std::cout << #s

int main() {
    Y;
}

它仍然有效.

但是,如果我尝试X从两个或更多不同的宏组成调用,我会得到一大堆错误:

#define A X(
#define B hello
#define C )

#define X(s) std::cout << #s << '\n'


int main()
{
    A B C;
}

请参阅输出:http://cpp.sh/5ws5k

为什么我不能从两个或多个宏扩展组成一个宏调用,不预处理器递归扩展它们?



1> R Sahu..:

为什么我不能从两个或多个宏扩展组成一个宏调用,不预处理器递归扩展它们?

你可以编写宏.预处理器确实递归地扩展宏.

但是,它不会首先扩展宏宽度.它首先扩展了它们的深度.

您遇到了问题,因为您希望预处理器首先扩展宏宽度.

您可以在16.3.4重新扫描和进一步替换 C++ 11标准中阅读有关递归宏扩展的更多信息.


相关C++标准报价:16.3.4重新扫描和进一步更换
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有