Funciones estáticas en el controlador de dispositivo Linux?
linux-device-driver static-functions (3)
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.
¿Hay alguna razón por la cual la definición de la mayoría de las funciones en el controlador del dispositivo en el código de Linux se define como estática? ¿Hay alguna razón para esto?
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?
Por las mismas razones, usa estática 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.
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.