如果#define
是一个预处理程序指令,那么编译器将在实际编译之前知道该常量是什么,因为它已经定义了但如果我们在它之前使用它会产生错误。这是我想要运行的代码:
#include <iostream>
using namespace std;
void sum(){
cout<<"PI is: "<<pi;
}
#define pi 3
void main(){
sum();
}
这会产生如下错误:
未定义的符号pi
根据理论,首先会编译(#)语句,因此编译器已经知道pi是什么。
答案 0 :(得分:2)
因为宏是在&#34;自上而下处理&#34;方式。
[cpp.replace]
形式的预处理指令
# define identifier replacement-list new-line
定义一个类似对象的宏,使宏名称的每个后续实例被替换 构成指令其余部分的预处理令牌的替换列表
它们持续到相应的#undef
或翻译单元的末尾(源文件),以先到者为准(cpp.scope))