Domanda

Recentemente mi sono imbattuto in una domanda: come accedere a una variabile dichiarata di tipo statico file1.c ad un altro file2.c?

È possibile accedere variabile statica?

La mia comprensione circa la parola chiave static in C

static è "collegamento interno", in modo che siano accessibili solo da una unità di compilazione - quello in cui sono stati definiti.Oggetti dichiarati con collegamento interno sono private per singolo modulo.

Come un mio amico mi suggerisce di sotto di soluzione.

In file1.c

   #include <stdio.h>

   int main()
   {
          int b=foo();
          printf("%d",b);
          return 0;
   }

in file2.c

   static int a=25;

   int foo()
   {
        return a;
   }

compilato da gcc file1.c file2.c -o file

Se faccio in precedenza, mi è possibile accedere alla variabile.

Quindi le mie domande sono:

  1. Il programma di cui sopra violare variabile statica regole?

  2. Se non è così, perché è così, e non c'è altro modo per accedere variabile statica, tranne compresi file#include <…>) non è così.

    Come io sono in grado di accedere a una variabile statica di un altro file?

    In C, come faccio a limitare l'ambito di applicazione di una variabile globale il file in cui è dichiarata?

  3. Mi corregga se sbaglio, con la variabile statica concetto e se altre soluzioni migliori sono disponibili per l'accesso variabile statica?

È stato utile?

Soluzione

1) il programma di cui sopra violare variabile statica regole?

No, non sono vailoting tutte le regole.Qui pippo funzione crea una copia del valore di quella variabile statica e utilizzato in altri file.La sua fine.

2) Se non perché è così, e non c'è altro modo per accedere variabile statica, tranne compresi file (#include<>) non e 'cosi' Come sono in grado di accedere a una variabile statica di un altro file?

Variabile statica sono significa solo utilizzare nel file.

Non è possibile utilizzare tale variabile che li rende extern in altri file.

Un altro sporco trucco è quello di ottenere il puntatore della variabile statica e fare che come puntatore globale e di fare che come esterno in un altro file si può utilizzare la variabile statica.

file1.c

 #include<stdio.h>
  static int a=25;
  int* ptr = &a;

file2.c

#include<stdio.h>
extern int *ptr;

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

Mi corregga se sbaglio, con la variabile statica concetto e se altre soluzioni migliori sono disponibili?

  1. Una variabile statica ha una vita si estende attraverso l'intera esecuzione del programma

  2. Se non inizializzare la variabile statica con qualche valore, e quindi il suo valore di default è 0.

  3. Una variabile statica ha portata limitata al solo file.Non si può accedere attraverso il nome da un file diverso.

  4. Hai temp1.c e temp2.c entrambi sono sempre compilato insieme anche allora si può avere statico variabile con lo stesso nome in entrambe le file, e sono variabili separate.

In C, come faccio a limitare l'ambito di applicazione di una variabile globale il file in cui è dichiarata?

Con tale variabile globale come statico.

Altri suggerimenti

Quello che comunemente chiamiamo una variabile in C è in realtà due cose:un oggetto, la memoria allocata per la variabile interpretato con un certo tipo, e un identificatore, un modo di accedere all'oggetto.

Non c'è nessun problema per l'accesso a un static oggetto o il suo valore di un'altra unità di compilazione.La funzione foo promuove il valore di un'altra unità, che è bello, ma potrebbe anche promuovere l'indirizzo di a senza problemi.

Avendo collegamento interno riguarda solo il identifer, il nome a.Questo è visibile solo all'interno file2.c.

Con il static int a=25; la variabile a avrà interna di collegamento;significato il linker non può vedere a ovunque al di fuori del file2.c TU.

Quando si sta chiamando foo() in file2.c, si ottiene una copia del a, è la copia di stampa;ma questo non significa che si ha accesso effettivo a definito in file2.c Quando avete bisogno di un accesso, ove la stessa variabile è visibile in diversi TUs, si potrebbe fare questo

La definizione di file

Questo file sia dichiara e definisce la variabile;inoltre inizializza a 1 troppo, senza la quale non sarà di default inizializzato a 0.

// (non-static) global variable with external linkage and thus visible across TUs
int var_across = 0;
void use()
{
   var_across = 1;
}

Utilizzando il file

// just a declaration to tell that it's defined elsewhere; not a definition
extern int var_across;
void use_here()
{
   var_across = 2;
}

L'indirizzo assegnato alla variabile statica per puntatore farà variabile statica disponibile per sottofile.

In sottofile dobbiamo usare la parola chiave extern per il puntatore.

Ma non è necessario farlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top