解题思路:
刚开始学的小白,个人把宏定义理解成和函数差不多的东西,这样在定义的时候就可以随意改变参数并且不会出错
注意事项:
看翁恺老师视频的时候老师一再强调
①带参数的宏一定要加括号
②整个值要加括号,参数出现的地方都要加括号
这样就不会被优先级所影响出现一些错误。
比如我们写一个程序来计算(a+b)*5的结果
#include#include#define s(a,b) a+b int main(){ int a = 5; int b = 9; printf("%d",s(a,b)*5); return 0; }
按照理解,这个程序的结果应该是5+9然后*5=70,但是实际编译器输出的结果是
我们可以在编译代码时使用gcc file.c --save-temp,查看生成的file.i文件的最后几行
可以看到实际是把整个宏定义的参数直接带入,而在没有给整个参数值加括号就会导致计算出错。程序并没有把宏所定义的参数自动的看成一个整体
正确代码应该是
#include#include#define s(a,b) ((a)+(b)) int main(){ int a = 5; int b = 9; printf("%d",s(a,b)*5); return 0; }
最后强调
①带参数的宏一定要加括号
②整个值要加括号,参数出现的地方都要加括号
参考代码:(我并没有给所有参数都加括号 。。。这并不符合上面所写的强调,主要是如果全部加括号我就乱了。。大家根据情况自行调节)
#include#include#define S(a,b,c) ((a+b+c)/2) #define area(S,a,b,c) (sqrt(S*(S-a)*(S-b)*(S-c))) int main(){ double a,b,c; scanf("%d %d %d",&a,&b,&c); double s = S(a,b,c); double m = area(s,a,b,c); printf("%.3lf",m); return 0; }
0.0分
0 人评分
2004年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:481 |
简单的a+b (C语言代码)浏览:582 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:696 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:666 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:1070 |
C语言程序设计教程(第三版)课后习题10.4 (C语言代码)浏览:578 |
【明明的随机数】 (C语言代码)浏览:837 |
矩形面积交 (C语言代码)浏览:1424 |
简单的a+b (C语言代码)浏览:681 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:849 |