C++ 宏:优先顺序差异? [英] C++ macros: order of precedence difference?

查看:55
本文介绍了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++ 宏:优先顺序差异?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆