gpt4 book ai didi

c++ - 有条件包含的疑问

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

这实际上是从我的模块(C 中的预处理器)中提取的

条件表达式可以包含除赋值运算符、递增和递减运算符之外的任何 C 运算符。

自从我尝试使用 this 以来,我不确定是否收到了这条声明并且有效。对于其他操作,可能的解决方法是在条件表达式 something like this to be precise 内简单地声明宏或函数。 .

我也不明白这条规则背后的基本原理是什么。有人可以解释一下吗?

谢谢

最佳答案

你似乎误解了短语条件表达式指的是什么。
在这段代码中

#if defined TEST
int a = 0;
#endif

条件表达式是由#if 测试的部分,意味着它是defined TEST 部分。

不允许赋值、递增和递减的原因是因为那些运算符想要更改一个变量,这在预处理器的上下文中是无意义的。
预处理器的工作完全基于文本替换和结果常量表达式的评估。

如果你有这个代码

#define X a++
#define Y 42

#if X == Y
#endif

然后在测试#if X == Y中,首先将XY替换为它们的宏扩展(分别为 a++42),导致

#if a++ == 42

接下来,a 被它的宏展开所取代。由于没有宏 a,替换被定义为 0:

#if 0++ == 42

现在没有可能的宏名称可以展开,因此预处理器会尝试评估条件。由于尝试递增常量 0,此计算因错误而失败。

关于c++ - 有条件包含的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4554313/

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