gpt4 book ai didi

c - GNU cpp 是否奇怪地为零参数的宏解释 C99 标准?

转载 作者:太空狗 更新时间:2023-10-29 15:35:48 24 4
gpt4 key购买 nike

为什么 GNU cpp 接受以下代码,即使在使用标志 -std=c99 -pedantic 运行时也是如此:

#define z()
#define w(x)
z()
w()
w(1)

C99 标准要求类函数宏调用中的参数数量应与宏定义中的参数数量相匹配(并且很高兴一个参数可能由预处理标记的空序列组成,因此大概前两个调用提供了一个空参数),但这不可能对所有三个调用都成立。

确实肯定只能用零参数调用 z,这在语法上是不可能的?

最佳答案

一些实验表明第一个 w 行被解释为一个空参数:

#define w(x) #x
w()
w(1)

当预处理给出:

""
"1"

更好的是:

#define w(x, y) #x <-> #y
w(,)
w(1,)
w(, 2)
w(1, 2)

给出:

"" <-> ""
"1" <-> ""
"" <-> "2"
"1" <-> "2"

漂亮...

不知道标准对此有何规定。必须问律师...

关于c - GNU cpp 是否奇怪地为零参数的宏解释 C99 标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22021104/

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