宏观难题的范围

时间:2017-08-06 06:53:27

标签: c++ macros

#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宏运行正常。为什么会这样?

2 个答案:

答案 0 :(得分:1)

这是因为您在调用之前定义了--simplify-by-decoration宏。

它与函数中定义的事实没有任何关系,即它可以在整个文件中访问,而不是它的定义。

答案 1 :(得分:1)

宏对功能范围一无所知。宏的范围从#define开始,以#undef或编译单元的末尾结束,以先发生者为准。

要使用宏,代码必须在宏的范围内 - 例如示例中的SUM宏。

MUL宏未在main内展开,因为尚未看到其#define。宏不能被前向声明,只是#define'd,并且声明“包含”宏的函数与宏范围无关。