¿Cómo puedo compartir una variable global entre archivos c?


Si defino una variable global en un archivo .c, ¿cómo puedo usar el valor de la misma variable en otro archivo .c?

File1.c

#include<stdio.h>

int i=10;

int main()
{
printf("%d",i);
return 0;
}

File2.c

#include<stdio.h>

int main()
{
//some data regarding i
printf("%d",i);
return 0;
}

Cómo puede el segundo archivo usar el valor de i del primer archivo aquí.

 38
Author: Stephen, 2011-07-22

7 answers

Archivo 1:

int x = 50;

Archivo 2:

extern int x;

printf("%d", x);
 55
Author: Triton Man,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-22 16:20:04

Use la palabra clave extern para declarar la variable en el otro archivo .c. Por ejemplo:

extern int counter;

Significa que el almacenamiento real se encuentra en otro archivo. Se puede utilizar tanto para variables como para prototipos de funciones.

 3
Author: mdm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-22 16:22:05

Usando extern <variable type> <variable name> en un encabezado u otro archivo C.

 2
Author: Murali VP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-22 16:20:24

En el segundo archivo .c use la palabra clave extern con el mismo nombre de variable.

 1
Author: Asha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-22 16:21:01

Haga lo mismo que hizo en file1.c En file2.c:

#include <stdio.h> 

extern int i;  /*This declare that i is an int variable which is defined in some other file*/

int main(void)
{
/* your code*/

Si usa int i; en file2.c bajo main () entonces seré tratado como variable automática local no igual a la definida en file1.c

 1
Author: ami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-22 22:33:17

Use la palabra clave extern en otra.archivo c.

 0
Author: Kiran Padwal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-08 17:13:45

Si desea utilizar la variable global i del archivo 1.c en archivo2.c, a continuación se presentan los puntos a recordar:

  1. la función principal no debería estar en file2.c
  2. ahora la variable global i se puede compartir con file2.c de dos maneras:
    a) declarando con la palabra clave extern en file2.c i. e extern int i;
    b) definiendo la variable i en un archivo de cabecera e incluyendo ese archivo de cabecera en file2.c.
 0
Author: bharaniprakash tumu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-26 12:48:40