11
votes

Accédez à une variable statique globale d'un autre fichier en C

En C langage C, je souhaite accéder à une variable statique globale en dehors de la portée du fichier. Laissez-moi savoir le meilleur moyen possible de le faire. Une des méthodes consiste à attribuer une variable globale externe la valeur de la variable statique,

dans le fichier AC xxx

dans le fichier bc xxx < / pré>

mais dans ce cas, toute modification de VAL (fichier AC) ne sera pas mise à jour dans globalvar dans (fichier BC).

S'il vous plaît laissez-moi savoir comment J'accueille la même chose.

merci, Sikandar.


1 commentaires

Pour ceux qui se demandent pourquoi quelqu'un voudrait faire cela: je rencontre une situation similaire avec laquelle vous devez accéder à une table de commandement dans le code généré, développant dans l'IDE du fabricant pour leur matériel programmable.


4 Réponses :


6
votes

Vous ne pouvez pas accéder à une variable statique de niveau de fichier à l'extérieur du fichier.

Si vous avez vraiment besoin de faire cela, vous avez quelques choix.

  1. Ajoutez une fonction d'accesseur au fichier qui a la variable statique. La bonne chose est que cela restreint l'accès de l'extérieur du fichier à l'accès en lecture seule:

    int lecture_static () {retour val; }

  2. Déposez le qualificatif statique et faites la variable d'un global.


2 commentaires

Presque: vous ne pouvez pas y accéder à l'extérieur de cette TU (unité de traduction). Une compréhension des TUS et de la réalisation du niveau de fichier statique signifie "tu-local seulement" est ce dont il a besoin.


@Roger - Vous êtes absolument correct. Mais je me souviens quand j'étais un programmeur de Newbie C que "Unité de traduction" m'a toujours confondu.



24
votes

Eh bien, si vous pouvez modifier le fichier AC , il suffit de faire val non statique.

Si vous pouvez modifier AC mais peut 'T Fake val non statique (pourquoi?), vous pouvez simplement déclarer un pointeur global à celui-ci dans AC xxx

et dans bc do xxx

qui vous permettra d'accéder à la valeur actuelle de val via * pval . Ou vous pouvez introduire une fonction non statique qui retournera la valeur actuelle du Val .

Mais à nouveau, si vous devez y accéder à partir d'autres unités de traduction, faites-la simplement -static.


0 commentaires

9
votes

Vous pouvez faire le pointeur de variable global à la variable statique globale. XXX PRE>

On s'exécute: P>

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


0 commentaires

2
votes

solution 1:

dans le fichier AC xxx

dans le fichier bc xxx < p> solution 2:

au lieu d'avoir une autre variable à transmettre l'adresse de la variable statique, ajoutant ainsi peu de gaspillage d'octets de mémoire, faites la variable statique elle-même comme extern.

solution 2 est recommandé, mais si vous êtes limité à la modification de la variable statique en externe, utilisez la solution 1.


0 commentaires