为什么a输出是52,而b是96呢?

[复制链接]
查看11 | 回复3 | 2011-4-9 09:30:23 | 显示全部楼层 |阅读模式
#include
# define N 10
# define s(x) x*x
# define f(x) (x*x)
int main()
{
int a,b;
a=3*s(N+2);
b=3*f(N+2);
printf("%d,%d",a,b);
}

回复

使用道具 举报

千问 | 2011-4-9 09:30:23 | 显示全部楼层
a = 3*N+2*N+2 = 3*10+2*10+2 = 52b = 3 * (N+2*N+2) = 3* (10+2*10+2) = 3*32 =96# define s(x) x*x 就是相当于直接代替的,s(N+2)就是用N+2直接代替定义中的x如果你是需要得到(N+2)*(N+2),可以这么写:# define s(x) ((x)*(x))
回复

使用道具 举报

千问 | 2011-4-9 09:30:23 | 显示全部楼层
把# define s(x) x*x# define f(x) (x*x)改成# define s(x) (x)*(x)# define f(x) ((x)*(x))这样在宏替换时能正确表达 如果按你现在定义的宏,那么a=3*s(N+2)=3*N+2*N+2=30+20=2=52b=3*f(N+2)=3*(N+2*N+2)=3
回复

使用道具 举报

千问 | 2011-4-9 09:30:23 | 显示全部楼层
a=3*10+2*10+2;b=3*(10+2*10+2);
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行