Linux内核:静态Const vs #Define

时间:2014-10-13 13:28:42

标签: c linux linux-kernel

更多"适当"编写Linux内核模块时:使用static const定义常量,或#define

我有一个与硬件相关的内核模块,我有一个典型的常量,它是缓冲区的数量。而不是硬编码" 3"到处都是,我想用一个常数。 C风格通常建议使用static const,但我注意到内核到处都是#define。有原因吗?

1 个答案:

答案 0 :(得分:3)

过去你不能这样做:

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,这是一个非常好的工具,当涉及到不重复整个地方的大小常量时,无论常量如何实现。