C语言 printf宏

[复制链接]
查看11 | 回复2 | 2011-4-3 00:42:19 | 显示全部楼层 |阅读模式
#include
#define P 3.5
#define S(X) P*X*X
main()
{
int x=2;
int y=3;
printf("%4d",S(x+y));
}
为什么输出是0

回复

使用道具 举报

千问 | 2011-4-3 00:42:19 | 显示全部楼层
S(x+y)被宏展开为 3.5 * 2 + 3 * 2 + 3,结果是浮点数16.0,但是只能用%lf输出,如果用%d输出,则明显类型不对,结果就不是16了
回复

使用道具 举报

千问 | 2011-4-3 00:42:19 | 显示全部楼层
宏展开后是P*X+Y*X+Y= 3.5 * 2 + 3 * 2 + 3=16.0(格式的转换的要求,低转向高),对于浮点数不能用d的格式输出,所以结果输出不是16
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行