This question already has answers here:
Why is C/C++ preprocessor adding a space here?
                                
                                    (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