2010-06-22 22 views
5

K & R dice:vinculación externa en C

por variables externas predeterminadas y funciones tienen la propiedad de que todas las referencias a ellos por el mismo nombre, incluso de funciones compiladas por separado, son referencias al mismo

Por favor explique lo que esto significa, no entiendo que

+3

Disculpe, ¿es nuevo en c? En mi opinión, K & R no es un libro introductorio adecuado para los novatos. – yehnan

+0

Sin embargo, hacer el esfuerzo de entender a K & R te dará una muy buena comprensión de C. Yo digo que sigas así. –

+1

No estoy en contra de la pregunta. Noté que asma me había hecho varias preguntas. Deseo sinceramente que pueda usar un libro más apropiado para él/ella. – yehnan

Respuesta

5

considerar 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 referirán a esa función. Esto se opone al enlace static, donde solo las personas dentro de la "unidad de traducción" (más o menos el archivo que está definido) pueden acceder a la función static_dbl.

Resulta que el extern está implícito por defecto en c. Así, se llega a la misma conducta, si escribió:

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

reciente estándares de C todavía requieren una "declaración de la función" así, por lo general en un archivo de cabecera en algún lugar, te vas a encontrar:

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

que dice "en algún lugar, en alguna otra unidad de traducción, tengo una función llamada extern_sqr.

La misma lógica se aplica a las variables.

+1

También puede agregar que en la declaración de la función, los nombres de las variables son opcionales, como puede ver int extern_sqr (int); en su lugar. – Maximus

+1

@Maximus: editado, gracias. También podría entrar en tipos de parámetros siendo _completamente_ opcional, dependiendo de qué estándar, pero ¿por qué confundir las cosas? :) – Stephen

0

vari externa Las funciones y ables 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 programa.