簡體   English   中英

在[C]中將“枚舉”轉換為其他“枚舉”是否有效?

[英]Is valid casting an `enum` to other `enum` in [C]?

我有兩個枚舉。

enum A { A1=1, A2=2 }

enum B { B1=1, B2=2 }

這是否符合C的標准?

A a = A1;
B b = a;

(與Clang編譯良好,但是我不確定這是標准行為還是擴展行為)

按照標准,它是有效的,但是C99規范提到某些實現可能會生成警告:

一個實現可能在許多情況下生成警告,但沒有一個警告內容被指定為該國際標准的一部分。 以下是一些較常見的情況。

  • 除了通過分配屬於該類型成員的枚舉常量,具有相同類型的枚舉變量或返回相同枚舉類型的函數的值( 6.7.2.2)。

我相信,在C枚舉基本int s的個性。 (這與它們是完全類型的C ++形成對比。)因此,分配不同的enum實際上仍然僅與int一起使用,因此是合法的。 但是,我並不是說建議這樣做:)

它是有效的標准C,但不是一個好主意。 請注意,它不是有效的C ++。

有效-枚舉是旨在幫助開發人員的語言功能。 如果您不指定枚舉項目值,則它們的值會自動生成。 從另一種語言

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM