Linux设备驱动程序中的静态函数?

linux代码中的设备驱动程序中的大多数函数定义是否被定义为静态是有原因的吗? 是否有一个原因?

我被告知这是为了范围界定和防止命名空间污染,任何人都可以详细解释为什么静态定义在这种情况下使用?

声明静态的函数在它们定义的翻译单元之外是不可见的(一个翻译单元基本上是一个.c文件)。 如果一个函数不需要从文件外部调用,那么它应该是静态的,以免污染全局名称空间。 这使得相同名称之间的冲突不太可能发生。 导出的符号通常用某种子系统标签来标识,这进一步减少了冲突的范围。

通常,指向这些函数的指针最终会在结构体中出现,所以它们实际上是从它们定义的文件之外调用的,而不是它们的函数名称。

出于同样的原因,你在任何代码中使用静态。 你只应该“发布”你的API调用,任何其他的东西都会打开你的滥用,比如能够从驱动之外调用内部函数,这些东西几乎肯定会是灾难性的。

这是很好的编程实践,只有让外部世界看到什么是必要的。 这就是封装的全部内容。

我同意。 这是任何C代码中的常见和明智的做法 – 不仅仅是内核代码! 不要以为这只适用于低级别的东西,任何延伸过一个.c文件的C代码都应该考虑到这一点。