Initialisation de la structure statique en C

J’ai un type de struct comme indiqué ci-dessous:

typedef struct position{ float X; float Y; float Z; float A; } position; typedef struct move{ position initial_position; double feedrate; long speed; int g_code; } move; 

J’essaye de l’ initialiser statiquement , mais je n’ai pas trouvé le moyen de le faire. Est-ce possible?

Cela devrait fonctionner comme ceci:

 move x = { { 1, 2, 3, 4}, 5.8, 1000, 21 }; 

Les initialiseurs d’accolade pour les structures et les tableaux peuvent être nesteds.

C n’a pas la notion d’object membre statique d’une structure / classe comme C ++ … en C, le mot clé static sur les déclarations de structures et de fonctions est simplement utilisé pour définir cet object comme visible uniquement par le code actuel module en cours de compilation. Ainsi, vos tentatives de code actuelles en utilisant le mot clé static ne fonctionneront pas. De plus, vous ne pouvez pas initialiser les éléments de données de structure au moment de la déclaration, comme vous l’avez fait. À la place, vous pouvez utiliser les initialiseurs désignés comme suit:

 static struct { position initial_position; double feedrate; long speed; int g_code; } move = { .initial_position.X = 1.2, .initial_position.Y = 1.3, .initial_position.Z = 2.4, .initial_position.A = 5.6, .feedrate = 3.4, .speed = 12, .g_code = 100}; 

Bien sûr, l’initialisation d’une structure anonyme comme celle-ci ne vous permettrait pas de créer plusieurs versions du type de structure sans saisir spécifiquement une autre version, mais si c’est tout ce que vous vouliez, le travail devrait être fait.

 #include  struct A { int a; int b; }; struct B { struct A a; int b; }; static struct B a = {{5,3}, 2}; int main(int argc, char **argv) { printf("Aa: %d\n", aaa); return 0; } 

résultat:

$ ./test

Aa: 5