#include <iostream>
using namespace std;
void sum(){
#define SUM(a,b) a+b
}
int main(void){
int a = 10;
int b = 20;
int c = SUM(a,b);
int d = MUL(a,b);
cout << c << endl;
cout << d << endl;
return 0;
}
void mul(){
#define MUL(a,b) a*b
}
问题是MUL宏出错。但是使用SUM宏运行正常。为什么会这样?
答案 0 :(得分:1)
这是因为您在调用之前定义了--simplify-by-decoration
宏。
它与函数中定义的事实没有任何关系,即它可以在整个文件中访问,而不是它的定义。
答案 1 :(得分:1)
宏对功能范围一无所知。宏的范围从#define
开始,以#undef
或编译单元的末尾结束,以先发生者为准。
要使用宏,代码必须在宏的范围内 - 例如示例中的SUM
宏。
MUL
宏未在main
内展开,因为尚未看到其#define
。宏不能被前向声明,只是#define
'd,并且声明“包含”宏的函数与宏范围无关。