为空结构启用警告

Mik*_*ike 5 c standards gcc struct

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

6.2.5-20

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

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

struct foo
{
};
Run Code Online (Sandbox Code Playgroud)

在MS VS中,抛出了一些错误:

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

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

  1. 我是不是正确读取规格,这是没有用C允许的?(并且更令人惊讶的是,微软是否正确?!)
  2. 是否有可以传入的选项gcc以使其捕获此问题?

oua*_*uah 7

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

  2. -Werror -pedanticgcc将停止翻译.

  • 因为`gcc`试图不破坏许多依赖于某些编译器中的扩展的代码.默认情况下,`gcc`非常宽容. (4认同)