Meilleure utilisation d'un struct global variable en C

J'ai un mondial var struct:

typedef struct {
    int myvar1;
    int myvar2;
    int myvar3;
    ...
    int myvar10;
} t_myStruct myGlobalData;

Je ne peux pas éviter ce mondial structures, donc je dois l'utiliser.
J'ai trois options pour l'utiliser:

  • Utiliser le mondial var "comme est" dans n'importe quelle fonction. I. e.:
    int myFunc(void) {
        myGlobalData.myvar1 = ...
        myGlobalData.myvar10 = myGlobalData.myvar5 + ...
    }
  • Déclarer un pointeur local et de l'utiliser:
    int myFunc(void) {
        t_myStruct * p;
    
        p = &myGlobalData;
        p->myvar1 = ...
        ...
        p->myvar10 = p->myvar5 + ...
    }
  • Utilisation locale de la var et de la copie pour struct global:
    int myFunc(void) {
        t_myStruct localStruct;
    
        localStruct.myvar1 = ...
        localStruct.myvar10 = localStruct.myvar5 + ...
        myGlobalData = localStruct ;
    }

Pourrait m'expliquer quel est le meilleur moyen, en général, et pourquoi?

Ils devraient vraiment faire plus facile de mettre le code-blocs entre les puces. Maintenant, je comprends pourquoi l'utilisation de la quote-blocs au lieu de code-blocks.
Merci pour les conseils et le modifier.
vous pouvez également "double tiret" les blocs de code à se joindre à eux pour les éléments de la liste
La troisième option est particulièrement risqué. Avoir deux versions des mêmes données qui datent un peu l'un de l'autre est une recette pour le méchant conditions de course lorsque vous ajouter de la complexité et de plusieurs morceaux de code d'exploitation sur les différentes versions des données.
Votre memcpy copies myGlobalData à localStruct - est-ce intentionnel!? BTW myGlobalData = localStruct ; copie d'une struct.

OriginalL'auteur Kyrol | 2012-09-18