2013-03-14 59 views
4

我有一个关于C.空结构的问题,据我可以从阅读的标准来讲,似乎他们是不允许的:启用警告空结构

6.2.5-20

- 甲结构类型描述了一种顺序地分配非空子集构件的对象 (和,在某些情况下,一个不完整的阵列),其每一个具有一个任选 指定的名称和可能是不同类型。

所以,试图编译像不出意外时:

struct foo 
{ 
}; 

在MS VS,有一些错误时,抛出:

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

但是,当编译与相同的代码10没有发现错误。所以...

  1. 我正确阅读规范,这是而不是允许在C吗? (更令人惊讶的是,微软是否正确?!)
  2. 有没有一个选项可以传递到gcc使它能够解决这个问题?
+1

查看http://stackoverflow.com/questions/755305/empty-structure-in-c?rq=1 – Nick 2013-03-14 16:50:42

+1

@Nick - 不是真的一样。 A)该问题是关于摆脱警告,我*希望*看到警告。 B)你所连接的那个子问题是关于添加元素并保持大小为0的,我不在乎他谈论的C)在C11标准出来之前在2009年被问到,所以可能很好新的信息。 – Mike 2013-03-14 17:07:14

回答

6
  1. 是的,没有成员的结构类型不在C.

  2. -Werror -pedanticgcc有效将停止翻译。

+0

+1我的警告!为什么'gcc'让它与标准设置一起使用,如果它不合法C? – Mike 2013-03-14 17:02:57

+3

因为'gcc'在一些编译器中试图不打破很多依赖于扩展的代码。默认'gcc'非常宽容。 – ouah 2013-03-14 17:16:00