2013-03-14 61 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