5

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

struct foo { size_t var = 1; }

IDE 说它是合法的。我编译了这个项目(它是一个静态库..),编译器说它是合法的(不抱怨或抛出)。

现在,由于此时我只是在测试语法,因此我必须询问可能知道这是否真的有效的人,当我在我的程序中声明此标记的结构时,如下所示:

struct foo myfoo;

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

*编辑所以我和这里的好兄弟@SO发现它将在调试配置中编译,而不是在发布配置中编译。谁说一头不如一两千?:D

4

2 回答 2

4

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

struct foo { size_t var; };

struct foo myfoo = { 1 };

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

struct foo { static const size_t var = 1; }

...并且IDE 将其编译为 C++ 而不是 C。

于 2012-04-24T18:58:04.583 回答
1

简单的答案是:您不能在 struct 定义中进行初始化,因此如果编译器允许您这样做,就会发生一些奇怪的事情。

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

因此,对于您的结构:

struct foo {
    size_t var = 1;
}


你会初始化为:

type function_name(...params...) {
    struct foo myFooVar;
    myFooVar.var = 1;
    ....
    return <type>;
}
于 2012-04-24T19:13:03.247 回答