c – 这是内联函数的有效用法吗?

假设我有这个代码(不要介意SecondsToMinutes和MinutesToHours是彼此的副本)
inline float SecondsToMinutes(float seconds)
{
    return seconds / 60.0;
}
inline float MinutesToHours(float minutes)
{
    return minutes / 60.0;
}
inline float HoursToDays(float minutes)
{
    return minutes / 24.0;
}
inline float SeconndsToHours(float seconds)
{
    return MinutesToHours(SecondsToMinutes(seconds));
}
inline float MinutesToDays(float minutes)
{
    return HoursToDays(MinutesToHours(minutes));
}
inline float SeconndsDays(float seconds)
{
    return MinutesToDays(SecondsToMinutes(seconds));
}

这是内联的有效用法吗?是否有意义?这是好习惯吗?毕竟,如果我没记错的话,内联意味着函数调用函数体替换,所以

return MinutesToDays(SecondsToMinutes(seconds))

应该相当于

return seconds / 60.0 / 60.0 / 24.0

对?

或者为此使用宏更好吗?

#define EXCHANGE_SEC_MIN(x) (x / 60.0)
#define EXCHANGE_MIN_H(x) (x / 60.0)
#define EXCHANGE_H_D(x) (x / 24.0)
#define EXCHANGE_SEC_H(x) (EXCHANGE_MIN_H(EXCHANGE_SEC_MIN(x)))
#define EXCHANGE_MIN_D(x) (EXCHANGE_H_D(EXCHANGE_MIN_H(x)))
#define EXCHANGE_SEC_D(x) (EXCHANGE_MIN_D(EXCHANGE_SEC_MIN(x)))

一个更好的做法?或者两者都不是?我希望其他人能分一杯羹.

解决方法

Is this valid usage of inline? Does it make sense?

嗯,是的但没有.

在这一点上它并没有伤害任何东西,但也没有做你认为它做的事情.

一个excellent post about inline deft_code中正确地说:

It is said that inline hints to the compiler that you think the
function should be inlined. That may have been true in 1998,but a
decade later the compiler needs no such hints. Not to mention humans
are usually wrong when it comes to optimizing code,so most compilers
flat out ignore the ‘hint’.

因此,如果你这样做,它不会伤害任何人,但你的编译器听取你的提示的几率几乎为0.如果它认为适合内联代码,它本身就会这样做.

现在内联主要用于链接器,因为它允许多个编译单元中的多个定义.

如果您想确保您的代码尽可能快,并且您可以访问C 11,那么您应该使用constexpr:

constexpr float SecondsToMinutes(float seconds)
{
    return seconds / 60.0;
}
//etc..

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...