写linux内核模块时,用static const
定义常量,还是用#define
,哪个更“合适”?
我有一个与硬件相关的内核模块,我有一个典型的常量,即缓冲区的数量。我不想在任何地方都硬编码“3”,而是想使用一个常量。 C 风格通常建议采用 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
,它是一个非常好的工具,可以避免在所有地方重复大小常量,无论常量是如何实现的。
关于c - Linux 内核 : Static Const vs #Define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26341167/