有以下程序
#include <stdio.h>
#define PT 3.5 ;
#define S(x) PT*x*x ;
main( )
{ int a=1, b=2; printf("%4.1fn" , S(a+b)); }
程序运行后的输出结果是( )。答案:A
[解析] 宏定义不是C语句,末尾不需要有分号。因此语句"printf("%4.1fn”,S(a+b)); "展开后为"printf("%4.1fn",3.5;*a+b*a+b;); ",所以程序会出现语法错误。
我查了一下说因为是宏定义所以只能简单替换不能计算,但是我不能明白这句话的意思,为什么展开后为*a+b*a+b?
宏所做的工作是在预编译时将宏名文本替换为宏定义的值。宏不是函数。
有宏#define S(x) PT*x*x,那么S(a+b)将被文本替换为PT*a+b*a+b,然后依据运算符优先级进行计算。
本回答被提问者和网友采纳