可能重复:
Inline functions vs Preprocessor macros
what is concept of Inline function and how it is differ from macro?
inline unsigned int getminutes( unsigned int seconds )
{
return( seconds / 60 );
}
#define GetMinutes(seconds) (seconds) / (60)
老实说,我会问哪一个更快,但我在S.O上看到了很多,问哪一个更好会让我知识。 (是的!我是知识猎人)
答案 0 :(得分:4)
如果您可以使用内联函数来实现相同功能,请不要使用宏。假设您使用相当不错的解决方案,编译器将为您提供的两个解决方案生成完全相同的代码。
当然不能保证内联函数实际上会被内联,但在这些情况下,如果你的编译器无法内联该函数,那么它可能是一个非常糟糕的函数。
除非你真的需要(标题保护,做重复的东西等),否则不要使用宏。宏在各方面都是邪恶的,如果你在网上搜索信息,你可以阅读很多内容。
答案 1 :(得分:2)
如果您认为编译器无法保证使用inline
,我想宏会更快。如果函数没有内联,那么你就有了函数调用的开销。
宏将由预处理器扩展到位,因此它始终是内联的。 宏也不是类型安全的,具有全局范围。
首选功能。
答案 2 :(得分:0)
使用良好的优化编译器,性能将是相同的。不同之处在于内联函数或多或少是对编译器的建议。虽然编译器在大多数情况下应该遵循该建议,但宏版本将强制编译器内联代码。
另外,您的宏应该写为((seconds) / 60)
,以确保在所有情况下都使用预期的分组。
答案 3 :(得分:0)