Static functions in Linux device driver?

Is there a reason why most function definition in device driver in linux code is defined as static? Is there a reason for this?

I was told this is for scoping and to prevent namespace pollution, could anyone explain it in detail why static definition is used in this context?


  • Functions declared static are not visible outside the translation unit they are defined in (a translation unit is basically a .c file). If a function does not need to be called from outside the file, then it should be made static so as to not pollute the global namespace. This makes conflicts between names that are the same are less likely to happen. Exported symbols are usually indentified with some sort of subsystem tag, which further reduces scope for conflict.

    Often, pointers to these functions end up in structs, so they are actually called from outside the file they are defined in, but not by their function name.