#define B 100+B
main()
{
int i= B;
}
我知道这是错误的,但出于好奇,当我编译它时,我得到了这个奇怪的错误:
"B was not declared in this scope".
为什么会这样?如果此错误是因为编译器在替换后删除了宏,那么当 B 必须在 A 可用之前被删除时,以下代码如何正常工作?
#define B 100
#define A 100+B
main()
{
int i= B;
int j =A;
}
最佳答案
这是预处理器的输出:
gcc -E x.c
# 1 "x.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "x.c"
main()
{
int i= 100+B;
}
如您所见,它进行了替换。现在是编译步骤,它失败了,因为没有声明 B
。
其他代码没问题,这是输出:
main()
{
int i= 100;
int j =100+100;
}
关于c - 预处理器宏如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11818805/