Статическая инициализация структуры в C

У меня есть тип структуры, как показано ниже:

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; 

Я пытаюсь статически инициализировать его, но я не нашел способ сделать это. Это возможно?

Он должен работать следующим образом:

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

Инициализаторы скобок для структур и массивов могут быть вложенными.

C не имеет понятия статического члена объекта struct / class, такого как C ++ … в C, static ключевое слово в объявлениях структур и функций просто используется для определения того, что объект должен быть только видимым для текущего кода модуль во время компиляции. Таким образом, ваш текущий код пытается использовать static ключевое слово не будет работать. Кроме того, вы не можете инициализировать структурные данные-элементы в точке объявления, как вы это делали. Вместо этого вы можете сделать следующее, используя назначенные инициализаторы :

 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}; 

Конечно, инициализация анонимной структуры, подобной этой, не позволит вам создавать более одной версии типа структуры, не набрав при этом другую версию, но если это все, что вам нужно, тогда это должно выполнить эту работу.

 #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; } 

результат:

$ ./test

Aa: 5