Enlace externo en C

K&R dice:

Por defecto, las variables y funciones externas tienen la propiedad de que todas las referencias a ellas con el mismo nombre, incluso de las funciones comstackdas por separado, son referencias a la misma cosa.

Por favor explique lo que esto significa, no lo entiendo.

Considere dos funciones:

extern int extern_sqr(int i) { return i * i; } static int static_dbl(int i) { return i * 2; } 

Entonces las personas que se refieren a extern_sqr se extern_sqr a esa función. Esto se opone al enlace static , donde solo las personas dentro de la “unidad de traducción” (aproximadamente el archivo que está definido) pueden acceder a la función static_dbl .

Resulta que el extern está implícito por defecto en c. Entonces, obtendrías el mismo comportamiento, si escribieras:

 int extern_sqr(int i) { return i * i; } 

Los nuevos estándares de C aún requieren una “statement de función”, por lo que, en general, en un archivo de encabezado, encontrarás:

 int extern_sqr(int i); // Note: 'i' is optional 

Lo que dice “en alguna parte, en alguna otra unidad de traducción, tengo una función llamada extern_sqr .

La misma lógica se aplica a las variables.

Las variables y funciones externas son globales, es decir, tienen los mismos valores (para variables) o definiciones (para funciones) incluso cuando se llaman desde diferentes archivos * .c dentro de su progtwig.