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

时间:2008-12-08 09:21:06

标签: c linux linux-device-driver static-functions

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

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

3 个答案:

答案 0 :(得分:17)

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

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

答案 1 :(得分:2)

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

良好的编程习惯只能让外界看到必要的东西。这就是封装的全部内容。

答案 2 :(得分:2)

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