给定以下内容:

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的值为0example.i的值为1example.f的值为(float) 1.0

10-05 20:49
查看更多