This question already has answers here:
Why is C/C++ preprocessor adding a space here?
(2个答案)
2年前关闭。
考虑以下代码片段。
现在,这里的预处理器首先用“ -B”替换代码中的所有A。
然后,它将代码中的所有B替换为“ -C”。因此原来的A现在实际上就是'--C'。
最后,所有C都被替换为5。所以A现在将是--5。
根据此逻辑,程序不应编译。
但是该程序的输出为:
请解释一下。
(2个答案)
2年前关闭。
考虑以下代码片段。
#include<stdio.h>
#define A -B
#define B -C
#define C 5
int main()
{
printf("The value of A is %dn", A);
return 0;
}
现在,这里的预处理器首先用“ -B”替换代码中的所有A。
然后,它将代码中的所有B替换为“ -C”。因此原来的A现在实际上就是'--C'。
最后,所有C都被替换为5。所以A现在将是--5。
根据此逻辑,程序不应编译。
但是该程序的输出为:
The value of A is 5
请解释一下。
最佳答案
完成宏替换后,除非使用令牌粘贴运算符#
,否则它将创建单独的令牌。所以所有宏扩展后的结果是
printf("The value of A is %dn", - - 5);
--5
无效时,- - 5
可以。它对5
取反两次,取反互相抵消,从而导致5
。关于c - 在MACRO中加上+/-号时的预处理器指令规则,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50979357/
10-11 20:35