I declaró una variable i en temp2.h extern i;
que contiene sólo una encima de la línea e hizo otro archivo temp3.cadvertencia en la declaración extern
#include<stdio.h>
#include<temp2.h>
int main()
{
extern i;
i=6;
printf("The i is %d",i);
}
Cuando he realizado anteriormente como cc -I ./ temp3.c
Me siguiente errores
/tmp/ccJcwZyy.o: In function `main':
temp3.c:(.text+0x6): undefined reference to `i'
temp3.c:(.text+0x10): undefined reference to `i'
collect2: ld returned 1 exit status
Ya había declarado extern en temp3.c como dice KR en la página 33 como mencioné en la publicación anterior. Probé otra manera para temp3.c con misma cabecera del archivo temp2.h
#include<stdio.h>
#include<temp2.h>
int main()
{
i=6;
printf("The i is %d",i);
}
y compilé cc -I ./ temp3.c
y obtuve siguiente error
/tmp/ccZZyGsL.o: In function `main':
temp3.c:(.text+0x6): undefined reference to `i'
temp3.c:(.text+0x10): undefined reference to `i'
collect2: ld returned 1 exit status
También probé
#include<stdio.h>
#include<temp2.h>
int main()
{
extern i=6;
printf("The i is %d",i);
}
compilado esta uno
cc -I ./ temp3.c
tiene mismo error que en el post 1
temp3.c: In function ‘main’:
temp3.c:5: error: ‘i’ has both ‘extern’ and initializer
Así que han intentado al menos 3 formas diferentes de utilizar extern pero no de ellos trabajaron.
Quiero que esta variable esté también disponible en muchos otros archivos. Lo que haré y el valor si se cambia en un archivo por cualquier llamada de función, entonces otro módulo o programa que pueda estar usando debería obtener el valor cambiado. Así que quiero que la variable sea global para todos los módulos. Hasta su mensaje, no tenía idea de cómo funciona el externo. Pensé que el externo es una forma de hacer que una variable sea global. –
@Bond: hace que la variable sea global al definirla fuera de cualquier función en un archivo fuente, y al declararla en el encabezado y usar el encabezado en cada archivo fuente que necesita usar la variable. También incluye el encabezado en el archivo que define la variable para garantizar que la definición y la declaración sean consistentes. Entonces, declararlo ('extern int i; ') en el encabezado; defínalo una vez, probablemente en el archivo con 'main()' ('int i = 0;'). Evitar definiciones tentativas y definiciones comunes; no son completamente portátiles. Ver también [SO 1433204] (http://stackoverflow.com/questions/1433204/). –