有以下程序 #include <stdio.h> #define PT 3.5 ; #define S(x) PT*x*x ; main( )

有以下程序
   #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?

第1个回答  2019-08-12

宏所做的工作是在预编译时将宏名文本替换为宏定义的值。宏不是函数。

有宏#define S(x) PT*x*x,那么S(a+b)将被文本替换为PT*a+b*a+b,然后依据运算符优先级进行计算。

本回答被提问者和网友采纳
第2个回答  2019-08-12
你少看了,前面的3.5;也是S(x)这个宏展开后的一部分。正常的宏,除了宏尾无分号,一般会这样写,#define S(x) PT*(x)*(x) 。当x是一个表达式时,加括号和不加括号,会导致很不一样的结果
相似回答