Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 结构声明:声明中的有效初始值设定项?_C_Struct_Declaration_Definition - Fatal编程技术网

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

C 结构声明:声明中的有效初始值设定项?,c,struct,declaration,definition,C,Struct,Declaration,Definition,我在IDE(Netbeans)中声明一个结构,如下所示: structfoo{ 大小=1; } IDE说这是合法的。我编译这个项目(它是一个静态库…),编译器说它是合法的(不会抱怨或抛出) 现在,因为我只是在测试语法,所以我必须询问一些人,当我在我的过程中声明这个标记的结构时,他们可能知道这是否真的有效,比如: structfoomyfoo 所以问题是:这是一个有效的初始化器吗?(size\u t var=1)或者编译器只是在抚摸我的自我?我还没有在谷歌或类似的文档中找到任何东西,所以我猜它不会

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

structfoo{
大小=1;
}

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

现在,因为我只是在测试语法,所以我必须询问一些人,当我在我的过程中声明这个标记的结构时,他们可能知道这是否真的有效,比如:

structfoomyfoo

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


*编辑,让我和这里的好“ol男孩”知道它将在调试配置中编译,而不是在发布配置中编译。谁说一个人比几千人好我认为这是不允许的。您需要指定变量的值,而不是结构:

struct foo { size_t var; };

struct foo myfoo = { 1 };
至于允许它的IDE,很明显的可能性是代码确实有点不同,例如:

struct foo { static const size_t var = 1; }

…IDE编译为C++,而不是C.< /P> < P>简单的答案是:<强>不能在结构定义< /强>中初始化,所以如果编译器允许你这样做,就会有一些奇怪的事情发生。 要初始化,您必须在一个var(或对象,如果这是您想要的)中实例化该结构并初始化该var

因此,对于您的结构:


您将初始化为:

type function_name(...params...) {
    struct foo myFooVar;
    myFooVar.var = 1;
    ....
    return <type>;
}
输入函数名(…参数…){
结构foo-myFooVar;
myFooVar.var=1;
....
返回;
}

现在请看相关问题@TJD,它既快又棒!谢谢但我仍然不明白为什么GCC和IDE会毫无怨言地让它溜走。刚刚把警告全踢开了。。。我还能听到蟋蟀的唧唧声。哈哈,你用的是什么版本的gcc?我刚刚尝试使用4.4.3,我得到了一个错误
expected':'、'、'、';'、'}'或者“=”令牌之前的“\uuuu属性”
是的,我只是自己在发布模式和调试模式下检查了它。最初我处于调试模式。在发布模式下,如果没有尖叫,它将无法编译。听起来像是预发布中的bug。你应该让gcc团队知道。无论发生什么事情都是很奇怪的。也许这是我的下一个问题。“为什么这个标志不是编译警告?”@TristonJ.Taylor你不能告诉我们原因是什么?你使用C++ IDE?@ PavaMangunaseC++在C项目中兼容,在C文件中使用GCC在“调试模式”OK上做到了!调试配置是罪魁祸首!谢谢你的回答!“发生了一些奇怪的事情……”似曾相识。。lol换言之:我的感觉完全正确……你能证实这个错误吗
gcc(gcc)4.7.0 20120407(预发布)
找到了它:项目的调试配置会让它滑落,发布模式会让中土世界的龙之火熊熊燃烧。。或者类似的。
type function_name(...params...) {
    struct foo myFooVar;
    myFooVar.var = 1;
    ....
    return <type>;
}