gpt4 book ai didi

c - 为什么这没有给出编译错误

转载 作者:行者123 更新时间:2023-11-30 21:23:19 25 4
gpt4 key购买 nike

#include<stdio.h>
#define A -B
#define B -C
#define C 5

int main()
{
printf("The value of A is %d\n", A);
return 0;
}

在此,宏刚刚被替换 -B 变为 --C ,最后变为 --5。但是这应该会给出编译错误,因为 5 是一个常量,对吗?但它实际上打印“A的值为5”谁能清楚地解释一下我们什么时候会得到左值错误?因为下面的代码实际上给出了左值所需的错误。

#include <stdio.h>
#define PRINT(i, limit) do \
{ \
if (i++ < limit) \
{ \
printf("GeeksQuiz\n"); \
continue; \
} \
}while(1)

int main()
{
PRINT(0, 3);
return 0;
}

当发生左值错误时,请给我一个清晰的想法。我已经厌倦了多次搜索何时会出现左值错误的确切原因。

最佳答案

请记住,求反实际上是一个算术运算符,而不是作为数字属性而存在的东西。

这意味着在这种情况下--5实际上等于-(-(5))。也就是说,首先将 5 取反为 -5,然后再将其取反为 5

对于第二个宏,您在宏中使用的“参数”将被宏扩展逐字替换,导致您尝试对常量整数文字执行增量运算符。

<小时/>

我试图找到第一个宏的行为规范的引用,但它本质上扩展为 - -5。插入的空格是它不被视为减量运算符的原因。

关于c - 为什么这没有给出编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381744/

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