c - Linux 内核 : Static Const vs #Define

标签 c linux linux-kernel

写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/

相关文章:

linux - 缓存一致性及其解决方案

linux - 在启动时设置进程-非root用户

linux-kernel - Linux内核中的人类可读时间戳

linux - 我正在创建一个内核模块来查找所有进程的驻留页面

c - c 中的管道,2 个 fork 与 main 对话

c - 字符串作为c中的参数

c - 给定宽度和长度的矩形的包装

c - 如何在cmd窗口输出特殊字符?

linux - JavaFX : Tested/confirmed hardware (GPU) acceleration on Linux

c++ - 先前运行正常时 QApplication 构造函数中的永久 sigabrt