02
2020
04

宏定义的用法,看下面这个程序,求出结果

#include <stdio.h>

#define S(a,b) a*b

 

int main(void)

{

int n = 3;

int m = 5;

printf("%d",S(n+m,m+n));

 

return 0;

}

这道题容易出现的错误结果是64,得到这个结果肯定是这样理解的(3+5)*(5+3)。其实并不是,大家要理解宏定义的概念,宏定义只是简单的符号替换,而不做其他处理,所以这里得到的结果是 3+5*5+3=31.


大家看看运行结果:


fs@ubuntu:~/qiang/hanshu$ gcc -o 1 1.c

fs@ubuntu:~/qiang/hanshu$ ./1

31

要想得到正确结果,应该怎么样呢?应该这样改,define s(a,b) (a)*(b),这样才是正确结果;


fs@ubuntu:~/qiang/hanshu$ gcc -o 1 1.c

fs@ubuntu:~/qiang/hanshu$ ./1

64

大家记住这句话,宏定义只是简单的符号替换!

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。