将以下函数定义为宏或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;
}
答案 0 :(得分:2)
你应该内联那些。无论如何,编译器几乎肯定会这样做。
代码是一行,不太可能创建代码膨胀,因此内联可能更有效。编译器知道这一点,但是,如果这不正确,我认为编译器可以忽略inline
关键字。
一般来说,你应该避免使用宏 - 它们会导致许多意想不到的问题,并且通常与内联函数一样糟糕,而且使用起来要困难得多。有宏的用途,但这绝对不适合一个。
答案 1 :(得分:1)
您可能应将这些函数声明为static inline
函数,并在标题文件中定义它们。
(或者,通过使用最近的link-time optimization编译并将与gcc -flto -O2
相关联来启用GCC
答案 2 :(得分:0)
首先,definitely不是宏。现在,我们必须在:
之间做出选择inline
。当前版本中的GCC将决定是否应该内联该函数。那么,为什么要这么麻烦?这就是为什么我会选择选项1.更短的代码和更少的代码的作者和读者花费的时间。