Me pregunto sobre el uso de la palabra clave static
como limitante para el alcance variables en un archivo, en C.Razones para utilizar las funciones estáticas y variables en C
La manera estándar para construir un programa en C como veo que es a:
- tienen un grupo de archivos c que definen funciones y variables, posiblemente alcance limitado con
static
. - tienen un grupo de archivos h que declaran las funciones y posiblemente variables del archivo c correspondiente, para que otros archivos c puedan usar. Las funciones y variables privadas no se publican en el archivo h.
- cada archivo c se compila por separado en un archivo o.
- todos los archivos están unidos entre sí en un archivo de aplicación.
Veo dos razones para declarar un gobal como static
, si la variable no se publica en el archivo de todos modos h:
- uno es para facilitar la lectura. Informe a los lectores futuros, incluyéndome a mí, que no se accede a una variable en ningún otro archivo.
- el segundo es evitar que otro archivo c vuelva a definir la variable como
extern
. Supongo que al enlazador no le gustaría que una variable fueraextern
ystatic
. (No me gusta la idea de un archivo redeclar una variable propiedad de otra persona comoextern
, ¿está bien?)
¿Alguna otra razón?
Igual va para las funciones static
. Si el prototipo no se publica en el archivo h, es posible que otros archivos no utilicen la función de todos modos, entonces, ¿por qué definirlo como static
? Puedo ver las mismas dos razones, pero no más.
Seis años después, ahora sé que 'estático' no limita el alcance, sino que proporciona un enlace interno. Es similar, si considera una unidad de traducción como un alcance, pero no el término correcto. – Gauthier