2008-12-08 20 views
9

¿Hay alguna razón por la cual la mayoría de las definiciones de función en el controlador de dispositivo en código de Linux se define como estática? ¿Hay alguna razón para esto?Funciones estáticas en el controlador de dispositivo Linux?

Me dijeron que esto es para determinar el alcance y evitar la contaminación del espacio de nombres, ¿alguien podría explicarlo en detalle por qué se usa la definición estática en este contexto?

Respuesta

17

Las funciones declaradas estáticas no son visibles fuera de la unidad de traducción en la que están definidas (una unidad de traducción es básicamente un archivo .c). Si una función no necesita ser llamada desde fuera del archivo, entonces debe estar estática para no contaminar el espacio de nombres global. Esto hace que los conflictos entre nombres que son los mismos tengan menos probabilidades de suceder. Los símbolos exportados generalmente se identifican con algún tipo de etiqueta de subsistema, lo que reduce aún más el alcance del conflicto.

A menudo, los punteros a estas funciones terminan en estructuras, por lo que en realidad se llaman desde fuera del archivo en el que están definidas, pero no por su nombre de función.

2

Por las mismas razones, utiliza estático en cualquier código. Solo debe 'publicar' sus llamadas a API, cualquier otra cosa lo abre a abusos, como poder llamar a funciones internas desde fuera del controlador, algo que casi seguramente sería catastrófico.

Es una buena práctica de programación solo hacer visible al mundo exterior lo que es necesario. De eso se trata la encapsulación.

2

Estoy de acuerdo. Esta es una práctica común y sabia en cualquier código C, ¡no solo en el código del kernel! No piense que esto solo es apropiado para cosas de bajo nivel, cualquier código C que se extienda más allá de un archivo .c debería haber pensado en esto.

Cuestiones relacionadas