一道想不明白的C语言题

来源:百度知道 编辑:UC知道 时间:2024/06/18 14:07:12
#include<stdio.h>
#define N 5
#define M N+1
#define f(x) (x*m)
main()
{int i1,i2;
i1=f(2);
i2=f(1+1);
printk("%d %d",i1.i2);}
求运行结果
对,是大M,可是,11是怎么得到的啊,不是M=6,那就是2*6=12了嘛

三个错误:
1. printf
2. m大些
3. .是逗号

运行结果:
11 7

分析:
的确是很有意思的结果,试着吧#define f(x) (x*M),改为#define f(x) (x*N)
你会发现结果是10,6.
可以说明i2的由来:在做f(x)时候,编译器把他看为了f(1)+1了因为f(x)只有一个变量,如果你写为f((1+1))则会得到正确的结果

同样,因为没有加括号的原因,编译器把N+1看成了先N再加一,如果加挎号#define M (N+1)即可得到正确结果

呵呵~~我也受教了~~以前还没有注意到这个问题呢~~

#include<stdio.h>
#define N 5
#define M N+1
#define f(x) (x*m)
main()
{int i1,i2;
i1=f(2);//2*5+1
i2=f(1+1);// i2=1+1*5+1
printf("%d %d",i1.i2);}

这个的要点在 宏定义 M 的时候 是N+1 不是(N+1) 所以这每次计算的时候M
都不能加刮号

你的程序有点错!
#include<stdio.h>
#define N 5
#define M N+1
#define f(x) (x*M)-------M要大写
main()
{int i1,i2;
i1=f(2);
i2=f(1+1);
printf("%d %d",i1,i2);}
结果11 7