Как инициализировать переменную const внутри структуры в C? - PullRequest
12 голосов
/ 13 января 2011

Я пишу структуру

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

хочу

struct Node * const NIL = &NIL_t;

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

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

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

Ответы [ 4 ]

22 голосов
/ 13 января 2011

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

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

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

1 голос
/ 13 января 2011

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

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

0 голосов
/ 02 июля 2019

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

#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 }
0 голосов
/ 31 августа 2011

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

struct {
    struct Node * const NIL;
    struct Node *root;
    struct Node NIL_t;
 } Tree = {&Tree.NIL_t};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...