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

Как инициализировать переменную const внутри структуры в C?

Я пишу struct

struct Tree{
    struct Node *root;
    struct Node NIL_t;
    struct Node * const NIL;    //sentinel
}

Я хочу

struct Node * const NIL = &NIL_t;

Я не могу инициализировать его внутри структуры. Я использую msvs.

Я использую C, а не С++. Я знаю, что я могу использовать список инициализации в С++.

Как это сделать в C?

4b9b3361

Ответ 1

Если вы используете C99, вы можете использовать назначенные инициализаторы для этого:

struct Tree t = { .root = NULL, .NIL = &t.NIL_t };

Это работает только на C99. Я тестировал это на gcc, и, похоже, он работает нормально.

Ответ 2

Структура определяет шаблон данных, но не имеет самих данных. Поскольку у него нет данных, нет возможности инициализировать его.

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

struct Tree t = { NULL, NULL, NULL };

Ответ 3

Может быть, что-то вроде этого будет достаточно?

struct {
    struct Node * const NIL;
    struct Node *root;
    struct Node NIL_t;
 } Tree = {&Tree.NIL_t};

Ответ 4

Для тех, кто ищет простой пример, вот оно:

#include <stdio.h>

typedef struct {
    const int a;
    const int b;
} my_t;

int main() {
   my_t s = { .a = 10, .b = 20 };
   printf("{ a: %d, b: %d }", s.a, s.b);
}

Производит следующий вывод:

{ a: 10, b: 20 }