Скажем, у меня есть этот код (не обращайте внимания на то, что 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
Right?
Или лучше использовать макросы для этого?
#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)))
Какая из них лучше? Или нет? Я бы хотел, чтобы другие центы по этому поводу.
Макросы почти всегда * * неправильный путь :-) – paxdiablo
Кроме того, ваши макросы ошибочны: что произойдет, если вы используете его как 'EXCHANGE_SEC_MIN (a + b)'? – mch
* Макросы почти всегда неправильны * Другими словами, если есть простая альтернатива макросу (которая в этом случае является функцией, независимо от того, встроена или нет), предпочитайте избегать макроса – Leon