一道c语言的编译预处理问题.请各位帮忙看看

来源:百度知道 编辑:UC知道 时间:2024/05/24 03:44:14
#define P 3.5
#define S(x) P*x*x
main()
{int x=2,y=3;
printf("%4d\n",S(x+y));

答案给的是%41.为什么啊?不明白.或是题目错了,还是答案错了吗?

S(x+y)按照原程序中的宏定义展开后是如下形式:

3.5*2+3*2+3

define的意思是直接把前面的字符串替换为后面的字符串
S(x) 不能在define里定义,应该另外写个函数

要得到你想要的答案
#define S(x) P*(x)*(x)
现在的计算结果是3.5*2+3*2+3=7+6+3=16

宏定义只是把相应的字符串替换
按照你的定义
S(x+y)应该被替换为P*x+y*x+y=3.5*2+3*2+3
建议在宏定义的时候
要考虑到运算符号的优先级问题

#define S(x) P*x*x
//改为:
#define S(x) (P*(x)*(x))