刚才正好在别的论坛看到一个问题,贴出来给LZ看看,或许有帮助
本人初学C,做题的时候看见这个问题,
#include<stdio.h>
#define X 3-2
void main()
{int x;
x=2*X;
printf("x=%d",x);
}
turbo C 运行后发觉结果是 4 而不是我想像中的2*(3-2)=2
我想问问,是什么原因!
望高手赐教···
#define X 3-2
表示用3-2替换X这样一个形式 做的只是替换
实际上 2*X 运行是这样的 2*3-2 结果为4
若想达到楼主所要结果应定义成
#define X (3-2)
不少C程序员使用宏定义,使用宏定义要特别小心,因为宏在预编译阶段会进行替换,这种替换不是智能的,所以宏定义表达式中很多时候你必须加上括弧。在C++中,这种用法被内联函数取代,不会发生预料之外的问题。
inline int X() { return 3 - 2; }
#include<stdio.h>
int main()
{
int x;
x = 2 * X();
printf("x = %d", x);
}