define的问题~~

来源:百度知道 编辑:UC知道 时间:2024/07/07 01:58:33
#include<stdio.h>
#define N 2
#define M N+1
#define NUM 2*M+1
main()
{ int i;
printf("%d,%d",NUM,2*M);
}

为什么NUM的值为6? 而2*M=5?

#define称为预编译:
该程序实际执行的步骤是:
NUM=2*M+1
把M替换成N+1,但是要注意系统不会跟你自动增加括号的,也就是
Num=2*N+1+1
所以Num=6
而2*M 同理可以计算出它等于5
2*M=2*N+1=5

你可能想要这样定义的结果
#define N 2
#define M (N+1)
#define NUM (2*M+1)

宏要带括号。你这样带入之后已经被改变了运算顺序