修改C语言程序(关于宏的定义)

来源:百度知道 编辑:UC知道 时间:2024/06/08 11:42:50
#include <stdio.h>
#define AD(y) 3.54+y
#define PR(a) printf("%d",(int)(a))
#define PR1(a) PR(a) putchar("\n")
void main(void)
{ int i=4;
PR1(AD(5)*i);
printf("%d\n",PR1(AD(5)*i));
}

我是使用Visual C++ 6.0 英文版编写的。
请大家帮助我看一下!!!

#include <stdio.h>

#define AD(y) (3.54+(y))
#define PR(a) printf("%d\n",(int)(a))

int main(void)
{
int i=4;

PR(AD(5)*i);

return 0;
}

定义带参数的宏,如果想不出错,需要用括号括起来,这是一般写法。。
宏不支持空格。。

我已经测试过了
问题主要有2个:
1.AD(5)*i 展开之后就变成了 3.54+5*4
所以最好在定义的时候写成 #define AD(5) (3.54+y)

2.你 printf("%d\n",PR1(AD(5)*i));显然有着语法问题,
PR1(AD(5)*i)的结果并不是一个值 而是一个表达式~~

比如#define AD(y) 3.54+y
3.54+y只能用AD(y)代替,像AD(5)是无效的。