Подтвердить что ты не робот

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

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

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;

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

#include <stdio.h>

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("A.a: %d\n", a.a.a);
    return 0;
}

результат:

$./test

A.a: 5