加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C中的宏扩展

发布时间:2020-12-14 17:33:01 所属栏目:百科 来源:网络整理
导读:这个宏 #define f(x) x x f (1 #undef f #define f 2 f) 根据this link扩展到此1 2 1 2. 它实际上是这样做的,我已经使用Xcode产品验证了执行操作预处理但扩展此宏时预处理器遵循哪些步骤? 解决方法 初步情况: f (1#undef f#define f 2f) 如果我们引用您提
这个宏

#define f(x) x x
     f (1
     #undef f
     #define f 2
     f)

根据this link扩展到此1 2 1 2.

它实际上是这样做的,我已经使用Xcode产品验证了>执行操作>预处理但扩展此宏时预处理器遵循哪些步骤?

解决方法

初步情况:

f (1
#undef f
#define f 2
f)

如果我们引用您提供的链接,则会通过两个步骤对宏进行预处理:
第1步:论证预扩展

If,within a macro invocation,that macro is redefined,then the new
definition takes effect in time for argument pre-expansion

用函数式宏作为参数的替换为2:

f(1 f) -> f (1 2)

第2步:参数替换

but the original definition is still used for argument replacement

使用其原始定义解析类似函数的宏f:

f(1 2) -> 1 2 1 2

整件事实际上等同于以下内容:

#define f(x) x x  
#define g 2
f(1 g)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读