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;
}
4

3 回答 3

2

你应该内联那些。无论如何,编译器几乎肯定会自己做这件事。

代码只有一行,不太可能造成代码膨胀,因此内联可能更有效。编译器知道这一点,但是,如果这是不正确的,我认为编译器可以忽略该inline关键字。

一般来说,您应该避免使用宏 - 它们会导致许多意想不到的问题,并且通常与内联函数一样糟糕,但更难使用。有宏的用途,但这绝对不是一个适合的地方。

于 2014-11-22T17:44:21.500 回答
1

您可能应该将它们声明为static inline函数并在文件中定义它们。

(或者,通过使用最近的GCC编译和链接来启用链接时优化gcc -flto -O2

于 2014-11-22T17:42:50.017 回答
0

首先,绝对不是宏。现在,我们必须选择:

  1. 从不写作inline
  2. inline 有时写作。

当前版本的 GCC 将为您决定是否应内联该函数。那么,何苦呢?这就是为什么我会选择选项 1。更短的代码和更少的编写者和阅读者花费​​的时间。

于 2014-11-22T17:44:21.277 回答