给定以下内容:
struct example_struct
{
char c;
int i;
};
以下任何初始值设定项语法在 C99 中是否有效?
语法示例 #1
struct example_struct example = { 'a', .i = 1};
语法示例 #2
struct example_struct example = { .c = 'a', 1};
我正在编写一个简单的结构解析器,在我的测试中,这不会导致使用 XCode 4.2 的编译器错误。 我希望我的解析器符合 C99 标准。 我的理解(没有标准引用(是结构初始值设定项应该具有所有未命名或命名(即指定(成员。
语法示例 #1 和 #2 应该是编译器错误吗?
如果示例有效,初始化语法的规则是什么?
更新的问题示例
struct example_struct_3
{
char c;
int i;
float f;
};
struct example_struct_3 example = { .i = 1, 1.0};
在同一个主要问题中,示例三将如何工作? 我主要对指定初始值设定项与标准初始值设定项的任意排序感到困惑。
初始化示例 1 和 2 都是有效的 C99/C11 初始化。可以在初始值设定项列表中混合使用指定初始值设定项和非指定初始值设定项。
编辑:关于您的新示例 3,初始化也是有效的。初始化后,example.c
具有值0
,example.i
具有值1
,example.f
具有值(float) 1.0
。