当编写一个linux内核模块时,哪个更“合适”:使用static const
来定义一个常量,还是#define
?
我有一个硬件相关的内核模块,我有一个典型的常量,这是缓冲区的数量。 而不是在任何地方硬编码“3”,我想使用一个常量。 C风格通常build议采取static const
,但我注意到内核充满了#define
遍布各处。 有没有原因?
它曾经是你不能这样做的:
const size_t buffer_size = 1024; unsigned char buffer[buffer_size];
在C中,因为buffer_size
不是一个“真正的”常量。 所以你经常看到
#define BUFFER_SIZE 1024 unsigned char buffer[BUFFER_SIZE];
代替。
从C99开始,你可以做前者,但不能在全球范围内。 它不会在函数之外工作(即使static
也不行)。 由于内核中的许多代码处理类似的构造,这可能是使用预处理器的原因之一。
注意:不要忘记sizeof
,这是一个非常好的工具,当不考虑常量的实现方式时,不要在整个地方重复大小常量。