【发布时间】:2017-01-03 07:06:58
【问题描述】:
我的印象是 #define 和 #include 可以写在我们代码的任何地方,只要它们在预处理器处理宏之前不会产生任何语法错误,然后再将其提取到编译器.
我运行了以下代码:
#include <stdio.h>
int main(void) {
int B = A;
#define A 4
printf("%d", B);
return 0;
}
它产生了以下错误:
prog.c:在函数'main'中:prog.c:4:13:错误:'A'未声明(首先 在这个函数中使用) 诠释 B = A; ^ prog.c:4:13: 注意:每个未声明的标识符对于它出现的每个函数只报告一次
但是当我这样做时,它会起作用!
#include <stdio.h>
int main(void) {
#define A 4
int B = A;
printf("%d", B);
return 0;
}
不确定我在这里遗漏了什么,但为什么编译器会给出这样的错误“未声明的 A”?
这样当预处理器读取#define A 4 行时,它会开始用4 替换任何A 从后续代码行?
【问题讨论】:
-
没有。将预处理器指令放在哪里绝对很重要。此外,虽然编译时无错误是有效程序的必要条件,但肯定不是充分条件。
标签: c compiler-errors c-preprocessor