Pregunta

En lenguaje C, Quiero acceder a una variable estática global, al margen del archivo. Que me haga saber la mejor manera posible hacerlo. Uno de los métodos consiste en asignar una variable global extern el valor de la variable estática,

En A.C. archivo

static int val = 10;
globalvar = val;

En b.c archivo

extern globalvar;

Pero en este caso, cualquier cambio en val (A.C. archivo) no se actualizarán en globalvar en (b.c archivo).

Por favor, hágamelo saber cómo puedo conseguir el mismo.

Gracias, Sikandar.

¿Fue útil?

Solución

Bueno, si se puede modificar a.c archivo a continuación, sólo hacer val no estático.

Si se puede modificar a.c pero no puede hacer val no estático (¿por qué?), Entonces puede declarar un puntero global para que en a.c

int *pval = &val;

y en b.c hacer

extern int *pval;

que le permitirá acceder al valor actual de val través *pval. O se puede introducir una función no estática que devolverá el valor actual de val.

Pero, de nuevo, si es necesario acceder a ella desde otras unidades de traducción, sólo lo hacen no estático.

Otros consejos

Se puede hacer que el puntero variable global para la variable estática global.

/* file  a.c */
static int a = 100; /* global static variable not visible outside this file.*/
int *b = &a; /* global int pointer, pointing to global static*/


/* file b.c */
extern int *b; /* only declaration, b is defined in other file.*/

int main()
{
        printf("%d\n",*b); /* dereferencing b will give the value of variable a in file a.c */
        return 0;
}

En funcionamiento:

$ gcc *.c && ./a.out
100

No se puede acceder a un nivel de archivo variable estática fuera del archivo.

Si realmente necesita hacer eso, usted tiene un par de opciones.

  1. Añadir una función de acceso al archivo que tiene la variable estática. Lo bueno es que este acceso restringe desde fuera del archivo para acceso de sólo lectura:

    int read_static () {return val; }

  2. La caída de la clasificación estática y hacer que la variable a.

  3. mundial

Solución 1:

En A.C. archivo

static int val=10;
int *globalvar =&val;

En b.c archivo

extern int *globalvar;

Solución 2:

En lugar de tener otra variable para pasar la dirección de la variable estática que añade unos pocos bytes de memoria desperdicio, hacen que la variable estática como externo.

Se recomienda

Solución 2, pero en caso de que si se limita a cambiar la variable estática a extern, solución de uso 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top