valeur par défaut pour le membre struct en C

Est-il possible de définir des valeurs par défaut pour un membre struct? J’ai essayé ce qui suit, mais cela provoquerait une erreur de syntaxe:

typedef struct { int flag = 3; } MyStruct; 

Les erreurs:

 $ gcc -o testIt test.c test.c:7: error: expected ':', ',', ';', '}' or '__atsortingbute__' before '=' token test.c: In function 'main': test.c:17: error: 'struct ' has no member named 'flag' 

La structure est un type de données . Vous ne donnez pas de valeurs à un type de données. Vous donnez des valeurs aux instances / objects des types de données.
Donc non ce n’est pas possible en C.

Au lieu de cela, vous pouvez écrire une fonction qui effectue l’initialisation pour l’instance de structure.

Alternativement, vous pourriez faire:

 struct MyStruct_s { int id; } MyStruct_default = {3}; typedef struct MyStruct_s MyStruct; 

Et ensuite, toujours initialiser vos nouvelles instances en tant que:

 MyStruct mInstance = MyStruct_default; 

Je suis d’accord avec Als que vous ne pouvez pas initialiser au moment de la définition de la structure en C. Mais vous pouvez initialiser la structure au moment de la création de l’instance indiquée ci-dessous.

En C,

  struct s { int i; int j; }; struct s s_instance = { 10 ,20 }; 

en C ++ il est possible de donner une valeur directe dans la définition de la structure indiquée ci-dessous

 struct s { int i; s(): i(10) { } }; 

Vous pouvez utiliser une fonction pour initialiser struct comme suit,

 typedef struct { int flag; } MyStruct; MyStruct GetMyStruct(int value) { MyStruct My = {0}; My.flag = value; return My; } void main (void) { MyStruct temp; temp = GetMyStruct(3); printf("%d\n", temp.flag); } 

MODIFIER:

 typedef struct { int flag; } MyStruct; MyStruct MyData[20]; MyStruct GetMyStruct(int value) { MyStruct My = {0}; My.flag = value; return My; } void main (void) { int i; for (i = 0; i < 20; i ++) MyData[i] = GetMyStruct(3); for (i = 0; i < 20; i ++) printf("%d\n", MyData[i].flag); } 

Une fonction d’initialisation sur une structure est un bon moyen de lui accorder des valeurs par défaut:

 Mystruct s; Mystruct_init(&s); 

Ou même plus court:

 Mystruct s = Mystruct_init(); // this time init returns a struct 

Une autre approche des valeurs par défaut. Effectuez une fonction d’initialisation avec le même type que la structure. Cette approche est très utile lorsque vous divisez un code volumineux en fichiers distincts.

 struct structType{ int flag; }; struct structType InitializeMyStruct(){ struct structType structInitialized; structInitialized.flag = 3; return(structInitialized); }; int main(){ struct structType MyStruct = InitializeMyStruct(); }; 

Créez une structure par défaut comme les autres réponses ont mentionné:

 struct MyStruct { int flag; } MyStruct_default = {3}; 

Cependant, le code ci-dessus ne fonctionnera pas dans un fichier d’en-tête – vous obtiendrez une erreur: multiple definition of 'MyStruct_default' . Pour résoudre ce problème, utilisez plutôt extern dans le fichier d’en-tête:

 struct MyStruct { int flag; }; extern const struct MyStruct MyStruct_default; 

Et dans le fichier c :

 const struct MyStruct MyStruct_default = {3}; 

J’espère que cela aidera toute personne ayant des problèmes avec le fichier d’en-tête.