关于C语言的 一个问题啊! 高手帮 帮忙啊

来源:百度知道 编辑:UC知道 时间:2024/09/22 15:38:10
一个选择题
下面程序输出结果是(A)
#include<stdio.h>
#define F1(a) 2.7+a
#define F2(b) printf("%d",(int)(b))
#define F3(c) F2(c);putchar('\n');
main()
{F3(F1(3)*4;}
A 14 B 15 C 22 D 23
对这个程序 我有个疑问就是 ,怎么F3那行的宏定义 后面怎么有分号啊
不是说不能有分号在 宏定义后面吗
望高手帮我解决以下啊 我将非常感谢你啊

该程序有错

首先,要申明的是c语言里宏是可以要分号的,只是最后一般习惯是不要分号了,要不然看起来程序就会有一点怪异了,就像你的程序语句:F3(F1(3)*4) 这里按你的程序这里是不要分号的。但看上去似乎就不像是c语言了,但写成这样F3(F1(3)*4);就好多了。因为c语言都是以分号结尾的了,看起来就好多了。
我还是建议你不要这样滥用宏了,因为像这样的带参数的宏用多了,特别是嵌套的多了,一旦有错改起来是一件很麻烦的事了。在c++里已经很少用宏了,因为有了更好的办法来达到宏的效果。

这里的宏定义F3的内容是用字符串代表两个语句,语句结束肯定要有分号.
不是不能用分号,是用了分号怕不好理解,可读性差一些,只是要少用.