gpt4 book ai didi

C 预处理器 # 和 ## 运算符

转载 作者:太空狗 更新时间:2023-10-29 16:32:19 26 4
gpt4 key购买 nike

C99 standard document在##预处理算子相关的部分有如下例子:

In the following fragment:

#define hash_hash # ## #
#define mkstr(a) # a
#define in_between(a) mkstr(a)
#define join(c, d) in_between(c hash_hash d)

char p[] = join(x, y); // equivalent to
// char p[] = "x ## y";

The expansion produces, at various stages:

join(x, y)
in_between(x hash_hash y)
in_between(x ## y)
mkstr(x ## y)
"x ## y"

In other words, expanding hash_hash produces a new token, consisting of two adjacent sharp signs, but this new token is not the ## operator.

我不明白为什么替换 hash_hash 会产生 ## 而不是“##”或“#”“#”。双哈希播放前后的单哈希有什么作用?

非常感谢任何回复。

最佳答案

# ## # 中的 ## 在此表达式中充当转义序列。它连接最左边和最右边的 # 以最终生成 token ##。简单地将宏定义为 ## 会导致错误,因为连接运算符需要两个操作数。

关于C 预处理器 # 和 ## 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6595082/

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