为空结构启用警告

时间:2013-03-14 16:49:07

标签: c gcc struct standards

我对C中的空结构有疑问。据我所知,从阅读标准来看,似乎不允许这样做:

6.2.5-20

  

- 结构类型描述了顺序分配的非空成员对象集   (并且,在某些情况下,是一个不完整的数组),每个都有一个可选的   指定的名称和可能不同的类型。

因此,在尝试编译类似的东西时并不奇怪:

struct foo
{
};

在MS VS中,引发了一些错误:

  

错误C2016:C要求结构或联合至少有一个成员

但是,在使用gcc -Wall -Werror编译相同代码时,没有看到错误。所以......

  1. 我是否正确地阅读了规范,在C中允许 ? (并且更令人惊讶的是,微软是否正确?!)
  2. 是否有可以传递给gcc以使其捕获此问题的选项?

1 个答案:

答案 0 :(得分:7)

  1. 是的,没有成员的结构类型在C中无效。

  2. 带有-Werror -pedantic
  3. gcc将停止翻译。