gpt4 book ai didi

c - 理解递归宏扩展

转载 作者:行者123 更新时间:2023-12-04 10:26:52 27 4
gpt4 key购买 nike

我在嵌入式面试问题集中遇到了这个问题。

#define cat(x,y) x##y

连接 xy .但是 cat(cat(1,2),3)不扩展但给出预处理器警告。为什么?

C 不鼓励递归宏扩展吗?我的假设是表达式应该显示 1##2##3 .我错了吗 ?

最佳答案

问题是cat(cat(1,2),3)没有以您期望的正常方式扩展 cat(1,2)会给 12cat(12, 3)会给 123 .

前面或后面是 ## 的宏参数在替换列表中没有在替换时扩展 .结果,cat(cat(1,2),3)扩展为 cat(1,2)3 ,自 起无法进一步扩展没有名为 cat(1,2)3 的宏 .
所以简单的规则是,替换列表依赖于 ## 的宏。通常不能以嵌套方式调用。

关于c - 理解递归宏扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com