【发布时间】:2023-03-16 22:55:01
【问题描述】:
为什么下面代码的输出值是 5?
#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;
}
【问题讨论】:
-
试试看。我会说 5
-
你尝试了之后得到了什么?你为什么不试试?输出让您感到困惑的是什么?
-
嗯...它在 macOS 上使用 clang 编译,输出为
5。 -
请记住,在预处理器处理宏扩展之前,输入已经被标记化。因此,代码就像你写的是
- - 5而不是--5,这将是一个错误(你不能减少一个常数)。 -
@Marged:我不同意:这与懒惰无关,编译源代码并不能证明太多,解释额外空间来自哪里是技巧问题的核心。告诉面试官令牌粘贴和编译器错误将是申请人的绝佳答案。
标签: c++ c c-preprocessor