我在IDE(Netbeans)中声明了一个结构,如下所示:
struct foo {
size_t var = 1;
}
IDE说它合法。我编译项目(它是一个静态的lib ..),编译器说它是合法的(不会呻吟或抛出)。
现在因为我只是在测试语法,所以当我在我的程序中声明这个标签的结构时,我不得不问一个可能知道这是否真的有效的人:
struct foo myfoo;
所以问题是:这是一个有效的初始化器吗? (size_t var = 1
)或编译器只是在这里抚摸我的自我?我没有在谷歌或这样的文档中找到任何东西,所以我猜它不会按照我希望的方式工作。
*编辑所以我和这里的好'ol男孩@SO想出它将在调试配置中编译但不是发布配置。谁说一个人的头比几千人好? :d
答案 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>;
}