C中的MACRO执行步骤
MACRO execution steps in C
我写了下面的代码来测试MACRO函数:
#define err_exit(a, b) {fprintf(stdout,"%s\n",(a)); return (b); }
int func1(int a){
if(a<50)
err_exit("less than 50", a);
if(a>50)
err_exit("greater than 50", a);
return 0;
}
int main() {
fprintf(stdout, "\npop\n%d\n",func1(30));
return 0;
}
输出为:
less than 50
pop
30
但我期待这个输出:
pop
less than 50
30
为什么文本出现在 pop
之前?函数 func1()
在它之后被调用!
宏如何替换主代码中的指令?
首先调用func1(30)
,这样就可以执行了,应该会产生结果。 main()
中的 fprint()
需要该结果,以便它可以打印其内容。
当 func1(30)
被执行时,宏的 fprintf()
被执行,并且 "less than 50" 被打印。现在,func1(30)
的结果可用。
fprint()
of main()
现在可以继续打印了(因为它拥有所需的一切(即 func1(30)
的结果)。
它将打印 "pop",然后按预期打印“30”。
我写了下面的代码来测试MACRO函数:
#define err_exit(a, b) {fprintf(stdout,"%s\n",(a)); return (b); }
int func1(int a){
if(a<50)
err_exit("less than 50", a);
if(a>50)
err_exit("greater than 50", a);
return 0;
}
int main() {
fprintf(stdout, "\npop\n%d\n",func1(30));
return 0;
}
输出为:
less than 50
pop
30
但我期待这个输出:
pop
less than 50
30
为什么文本出现在 pop
之前?函数 func1()
在它之后被调用!
宏如何替换主代码中的指令?
首先调用func1(30)
,这样就可以执行了,应该会产生结果。 main()
中的 fprint()
需要该结果,以便它可以打印其内容。
当 func1(30)
被执行时,宏的 fprintf()
被执行,并且 "less than 50" 被打印。现在,func1(30)
的结果可用。
fprint()
of main()
现在可以继续打印了(因为它拥有所需的一切(即 func1(30)
的结果)。
它将打印 "pop",然后按预期打印“30”。