Linux内核:静态常量vs #Define

编写一个linux内核模块时,哪一个更“适合”:使用static const来定义一个常量,还是#define

我有一个与硬件相关的内核模块,我有一个典型的常量,就是缓冲区的数量。 我不想在任何地方硬编码“3”,我想使用常量。 C风格通常建议采用static const ,但我注意到Kernel充满了#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 ,这是一个非常好的工具,当涉及到不重复整个地方的大小常量时,无论常量是如何实现的。

链接地址: http://www.djcxy.com/p/23055.html

上一篇: Linux Kernel: Static Const vs #Define

下一篇: Indicate C++ standard in source in a standard way