将以下函数定义为宏或inline
函数会更好吗?还是使用普通函数并信任编译器以保持(在我看来)更好的可读性更好?
typedef unsigned char byte;
void set_size_mark(byte size_mark, byte *ptr)
{
*ptr += size_mark << 1;
}
byte get_size_mark(byte *ptr)
{
return *ptr >> 1;
}
将以下函数定义为宏或inline
函数会更好吗?还是使用普通函数并信任编译器以保持(在我看来)更好的可读性更好?
typedef unsigned char byte;
void set_size_mark(byte size_mark, byte *ptr)
{
*ptr += size_mark << 1;
}
byte get_size_mark(byte *ptr)
{
return *ptr >> 1;
}
你应该内联那些。无论如何,编译器几乎肯定会自己做这件事。
代码只有一行,不太可能造成代码膨胀,因此内联可能更有效。编译器知道这一点,但是,如果这是不正确的,我认为编译器可以忽略该inline
关键字。
一般来说,您应该避免使用宏 - 它们会导致许多意想不到的问题,并且通常与内联函数一样糟糕,但更难使用。有宏的用途,但这绝对不是一个适合的地方。
首先,绝对不是宏。现在,我们必须选择:
inline
。inline
有时写作。当前版本的 GCC 将为您决定是否应内联该函数。那么,何苦呢?这就是为什么我会选择选项 1。更短的代码和更少的编写者和阅读者花费的时间。