[英]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.