Yer*_*aze 7 c linux linux-kernel
在编写linux内核模块时哪个更"合适":static const
用于定义常量,还是#define
?
我有一个与硬件相关的内核模块,我有一个典型的常量,就是缓冲区的数量.而不是在任何地方硬编码"3",我想使用常量.C风格通常建议采取static const
,但我注意到内核充满#define
了整个地方.有原因吗?
过去你不能这样做:
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
,它是一个非常好的工具,可以避免到处重复大小常量,无论常量是如何实现的。
归档时间: |
|
查看次数: |
979 次 |
最近记录: |