2011-01-13 72 views
12

我写一个struct如何初始化C中一个结构中的const变量?

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中这样做?

+2

出于好奇,为什么你需要一个NIL_t的值和一个指向NIL的指针?这似乎有点多余。独立地,这是一个有趣的问题! – templatetypedef 2011-01-13 01:53:21

+0

正确。你没有使用C++,这就是为什么你不能这样做。 – 2011-01-13 02:00:30

回答

21

如果使用的是C99,你可以将旧指定的初始化程序来做到这一点:

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

在C99这只作品,虽然。我已经在gcc上测试过了,它似乎工作得很好。

1

结构定义了数据模板,但本身没有数据。由于它没有数据,因此无法对其进行初始化。

另一方面,如果你想声明一个实例,你可以初始化它。

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

`NIL_t`是一个`struct Node`,而不是`struct Node *`,所以它可能不会被初始化为NULL。如果你愿意的话,或者一个宏,我还会推荐制作一个`struct Tree * init(...)`函数(或者一个`void init(struct Tree * t,...)`函数)来做这种类型的为你工作。 – 2011-01-13 02:07:29

0

也许这样的事情就足够了?

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