|
1鱼币
s1e5的作业问题:
#define F(n) 2*n
F(3+2)的结果是2*3+2
按着这个逻辑去理解,当宏定义改为
#define F(n) pow(2,n)
F(3+2)结果应该是 2的3次方+2=10。但是其实际结果是 32 即 2的五次方
宏定义预处理指令,即在程序还没编译前进行预处理
所以这里只会进行替换操作,不会进行任何的运算和程序的执行
按你上面的例子
#define F(n) 2*n
它只会原封不动的替换,那么F(3+2)就会替换成2*3+2,他会将你括号里的当成n,原封不动的替换到n的位置
至于加不加括号,那不是编译器这个阶段管的事,尽管2*3+2在后续计算时会先算2*3
#define F(n) pow(2,n)
它在这里也只会原封不动的替换,替换成pow(2,3+2),那在后续计算中按照规定及就会先算函数参数里的表达式,即3+2=5,这样就变成了pow(2,5)
|
最佳答案
查看完整内容
宏定义预处理指令,即在程序还没编译前进行预处理
所以这里只会进行替换操作,不会进行任何的运算和程序的执行
按你上面的例子
#define F(n) 2*n
它只会原封不动的替换,那么F(3+2)就会替换成2*3+2,他会将你括号里的当成n,原封不动的替换到n的位置
至于加不加括号,那不是编译器这个阶段管的事,尽管2*3+2在后续计算时会先算2*3
#define F(n) pow(2,n)
它在这里也只会原封不动的替换,替换成pow(2,3+2),那在后续计算中按照规定 ...
|