结构声明:声明中的有效初始值设定项?

时间:2012-04-24 18:53:59

标签: c struct declaration definition

我在IDE(Netbeans)中声明了一个结构,如下所示:

struct foo { size_t var = 1; }

IDE说它合法。我编译项目(它是一个静态的lib ..),编译器说它是合法的(不会呻吟或抛出)。

现在因为我只是在测试语法,所以当我在我的程序中声明这个标签的结构时,我不得不问一个可能知道这是否真的有效的人:

struct foo myfoo;

所以问题是:这是一个有效的初始化器吗? (size_t var = 1)或编译器只是在这里抚摸我的自我?我没有在谷歌或这样的文档中找到任何东西,所以我猜它不会按照我希望的方式工作。

*编辑所以我和这里的好'ol男孩@SO想出它将在调试配置中编译但不是发布配置。谁说一个人的头比几千人好? :d

2 个答案:

答案 0 :(得分:4)

我不认为这是允许的。您需要指定变量的值,而不是结构:

struct foo { size_t var; };

struct foo myfoo = { 1 };

至于IDE允许它,很明显的可能性是代码实际上有点不同,例如:

struct foo { static const size_t var = 1; }

... IDE正在将其编译为C ++而不是C。

答案 1 :(得分:1)

简单的答案是:你无法在结构定义中初始化,所以如果编译器允许你这样做,那就会发生一些奇怪的事情。

要初始化,你必须在var(或对象,如果这是你想要的)中实例化该结构并初始化该var。

所以,对于你的结构:

struct foo {
    size_t var = 1;
}


你会将其描述为:

type function_name(...params...) {
    struct foo myFooVar;
    myFooVar.var = 1;
    ....
    return <type>;
}