本文介绍了C++ 宏:优先顺序差异?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这个简单的代码,可以在华氏度和摄氏度之间转换.我定义了一些宏来执行此操作,但是使用它时却得到了一些奇怪的结果.当 absoluteTemp
= 373.15(开尔文中水的沸点)时,我使用此方法.
I have this simple code that converts between degrees Farehnheit and degrees Celcius. I defined some macros to do it, but I'm getting some weird results when I use it. I use this method when absoluteTemp
= 373.15 (the boiling point of water in kelvin).
#define kelvinToCelc(k) k - 273.15
#define celcToFahren(c) (9.0 / 5.0) * c + 32
double x = kelvinToCelc(absoluteTemp); // 100
double y = celcToFahren(x); // 212
double z = celcToFahren(kelvinToCelc(absoluteTemp)); // 430.52???
return celcToFaren(kelvinToCelc(absoluteTemp));
推荐答案
在
double z = celcToFahren(kelvinToCelc(absoluteTemp));
它变成
double z = (9.0 / 5.0) * absoluteTemp - 273.15 + 32
您需要在宏中添加括号
#define kelvinToCelc(k) (k - 273.15)
#define celcToFahren(c) ((9.0 / 5.0) * c + 32)
这篇关于C++ 宏:优先顺序差异?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!