Linux内核:静态Const vs #Define

Yer*_*aze 7 c linux linux-kernel

在编写linux内核模块时哪个更"合适":static const用于定义常量,还是#define

我有一个与硬件相关的内核模块,我有一个典型的常量,就是缓冲区的数量.而不是在任何地方硬编码"3",我想使用常量.C风格通常建议采取static const,但我注意到内核充满#define了整个地方.有原因吗?

unw*_*ind 4

过去你不能这样做:

const size_t buffer_size = 1024;
unsigned char buffer[buffer_size];
Run Code Online (Sandbox Code Playgroud)

在 C 语言中,sincebuffer_size不是一个“真正的”常数。所以你经常会看到

#define BUFFER_SIZE 1024
unsigned char buffer[BUFFER_SIZE];
Run Code Online (Sandbox Code Playgroud)

反而。

从 C99 开始,您可以执行前者,但不能在全局范围内执行。它不会在函数之外工作(即使是 made static)。由于内核中的许多代码处理类似的结构,这可能是使用预处理器的原因之一。

注意:不要忘记sizeof,它是一个非常好的工具,可以避免到处重复大小常量,无论常量是如何实现的。