Question

Y a-t-il une raison pour laquelle la plupart des définitions de fonction dans le pilote de périphérique du code linux sont définies comme statiques? Y a-t-il une raison à cela?

On m'a dit que cela servait à définir la portée et à prévenir la pollution des espaces de noms. Quelqu'un pourrait-il expliquer en détail pourquoi la définition statique est utilisée dans ce contexte?

Était-ce utile?

La solution

Les fonctions déclarées statiques ne sont pas visibles en dehors de l'unité de traduction dans laquelle elles sont définies (une unité de traduction est essentiellement un fichier .c). Si une fonction n'a pas besoin d'être appelée de l'extérieur du fichier, elle doit alors être rendue statique afin de ne pas polluer l'espace de nom global. Cela rend moins probable les conflits entre des noms identiques. Les symboles exportés sont généralement identifiés avec une sorte de balise de sous-système, ce qui réduit encore la portée des conflits.

Souvent, les pointeurs sur ces fonctions se retrouvent dans des structures. Ils sont donc appelés en dehors du fichier dans lequel ils sont définis, mais pas par leur nom de fonction.

Autres conseils

Pour les mêmes raisons, vous utilisez du statique dans n’importe quel code. Vous ne devez "publier" que vos appels d'API, tout ce qui vous rend vulnérable, comme le fait d'appeler des fonctions internes de l'extérieur du pilote, ce qui serait presque certainement catastrophique.

C’est une bonne pratique de programmation de ne rendre visible au monde extérieur que ce qui est nécessaire. C’est ce que l’encapsulation représente.

Je suis d'accord. C’est une pratique courante et judicieuse dans tout code C - pas seulement le code du noyau! N'allez pas croire que cela ne convient que pour les choses de bas niveau, tout code C qui dépasse un fichier .c aurait dû être pensé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top