2011-09-01 76 views
4

下面的代碼片段編譯就好了Mac OS X上使用gcc,但未能在Windows編譯LCC-win32的:LCC:Typedef'd Enum失敗的前向聲明?

typedef enum Foo Foo; 

// Other code here 

enum Foo { Bar = 1 }; 

而且給出了這樣的錯誤:

unknown enumeration 'Foo'

在我的具體情況,這不是問題。我簡單地組合語句爲:

typedef enum Foo { Bar = 1 } Foo; 

但我不知道是否LCC正在或者「更爲嚴格」(遵守一些標準)或「緘默」(編譯器是太愚蠢來處理這種情況) 。

謝謝。

另外,請看到我的其他LCC問題:LCC: Initializing Structs Containing Structs?

回答

3

正向枚舉的聲明是不規範的(他們違反C99部分6.7.2.3§3),如果你添加-pedantic標誌GCC將發出警告,以及(如果編寫便攜式代碼,您應該使用它)。

原因是實現可以自由選擇與int不同的整數類型來用於表示枚舉(參見C99第6.7.2.2節)。但是,爲了達到這個目的,編譯器必須在選擇適當的類型之前查看它需要表示的所有值。

+0

謝謝。這正是我所尋找的 - 也非常感謝你指出「pedantic」的標誌。 – Steve

+0

@Christoph在VC中允許枚舉的前向聲明:) – onmyway133