使用 C99 进行 C 结构初始化 - 混合命名和未命名成员是否有效?

标签 c c99 designated-initializer

鉴于以下情况:

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

关于使用 C99 进行 C 结构初始化 - 混合命名和未命名成员是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14800406/

相关文章:

c - 具有指定初始化程序的 MSVC12 (VS2013) 中可能存在编译器错误

c - 如何在函数中打印出大于9?

c - 在 C 中移动数组的最佳方法?

c - 在 C 中,const 变量是否保证在内存中是不同的?

c++ - __func__ 外部函数定义

c++ - 结构数组的嵌入式 C++ 静态初始化

c++ - 为什么C++ 20不支持乱序的指定初始化程序?

c - recvfrom 未收到取决于使用的 ai_family

mysql - 使用c中的sendto函数发送mysql输出

c - 在 C 中使用 audiere 库