如果在宏定义中存在较为复杂的语句,直接调用多个语句可能会出现问题:
- #include
-
- #define add(a, b) int sum=a+b; printf("sum=%d\n", sum);
-
- int main(){
- if(0)
- add(1,2);
- return 0;
- }
这个程序会报编译错误:
error: 'sum' undeclared (first use in this function)
这是由于编译前,通过预处理后,程序的代码被处理成:
- #include
-
- #define add(a, b) int sum=a+b; printf("sum=%d\n", sum);
-
- int main(){
- if(0)
- int sum=1+2; printf("sum=%d\n", sum);
- return 0;
- }
也就是实际的逻辑是:
- #include
-
- #define add(a, b) int sum=a+b; printf("sum=%d\n", sum);
-
- int main(){
- if(0)
- int sum=1+2;
- printf("sum=%d\n", sum);
- return 0;
- }
由于sum的定义是在if语句块的