2012-08-08 25 views
5

Tengo algunos problemas con los siguientes códigos particularmente en header.c donde no puedo acceder a la variable int int x en header.h ... ¿Por qué? ¿La variable externa en .h no es global? ¿Cómo puedo usar esto en otros archivos?C Referencia no definida

header.h === ===

#ifndef HDR_H 
#define HDR_H 

extern int x; 
void function(); 

#endif 

=== === header.c

#include <stdio.h> 
#include "header.h" 

void function() 
{ 
    printf("%d", x); //****undefined reference to x, why?**** 
} 

=== === Ejemplo.c

int main() 
{ 
    int x = 1; 
    function(); 
    printf("\n%d", x); 
    return 0; 
} 
+1

posiblemente solo elimine 'int' antes de' x' en su función principal. esto evitaría que se creara una nueva variable local en la función principal con el mismo nombre que la variable global – bph

+0

(eliminada; comentario agregado accidentalmente) –

+0

Consulte también más información sobre la int externa en [http: // stackoverflow.com/preguntas/7610321/diferencia-entre-extern-int-a-extern-int-a-42] [1] [1]: http://stackoverflow.com/questions/7610321/difference -entre-extern-int-a-extern-int-a-42 –

Respuesta

1

extern declara una variable, pero no la define. Básicamente le dice al compilador que hay una definición para x en otro lugar. Para solucionar añada lo siguiente a header.c (o algún otro archivo .cpero solamente uno.c archivo):

int x; 

Nótese que en la variable local main()x ocultará la variable global x.

1

De hecho extern int x; significa x se definirá en otro lugar/unidad de traducción.

El compilador espera encontrar una definición de x en el alcance global somewherelse.

3

La palabra clave extern dice que la variable existe pero no la crea. El compilador espera que otro módulo tenga una variable global con ese nombre, y el enlazador hará lo correcto para unirlos.

necesita cambiar sample.c así:

/* x is a global exported from sample.c */ 
int x = 1; 

int main() 
{ 
    function(); 
    printf("\n%d", x); 
    return 0; 
} 
7

La declaración

extern int x; 

le dice al compilador que en algún archivo fuente habrá una variable global de llamado x. Sin embargo, en la función main, declara local variable x. Mueva esa declaración fuera del main para hacerlo global.

0

Me reorganizar/modificar su código como éste y deshacerse de header.c

=== === sample.h

#ifndef SAMPLE_H 
#define SAMPLE_H 

extern int x; 
void function(); 

#endif 

Ejemplo.c === ===

#include <stdio.h> 
#include "sample.h" 

int x; 

void function() 
{ 
    printf("%d", x); 
} 

int main() 
{ 
    x = 1; 
    function(); 
    printf("\n%d", x); 
    return 0; 
} 
+0

¡Entendido! ¡Gracias a todos! – Analyn

Cuestiones relacionadas