C语言高手请进:貌似简单却令我想不通的#define 语句

来源:百度知道 编辑:UC知道 时间:2024/06/24 14:54:16
题目如下:
#define F(x) x+1
#define G(x) x-1
一下片段运行后为什么是x=9呢?
int x;
x = F(5)*G(5);

x=F(5)*G(5)展开以后是
x=5+1*5-1,结果就是9咯

宏的局限性就在于此,只是单纯代码替换

#define F(x) ((x)+(1))
deefine G(x) ((x)-(1))
int x;
x=F(5)*G(5);

这么写就是预期的效果,但即使加了括号,也不能保证所有场合都顺利进行

所以在c++中,用const和inline而避免使用define

因为括号没有打好啊,
预处理命令#define只是简单的把制定的地方代替为制定的句子,不是一个正式的函数,
在这里,f(5)翻译成5+1,g(5)翻译成5-1,
那么写在一起的时候,就简单的被写成
5+1*5-1,
那么就算出一个9,
#define虽然方便,但是不能代替函数,平时用这个来定义一下常量倒是不错的做法,不如代替pi,代替e...

宏只是在编译预处理的时候做直接语句替换

x=F(5)*G(5)=5+1*5-1=9

x=5+1*5-1=9;