首頁 > 後端開發 > C++ > 我可以在 C 中轉發聲明枚舉嗎?

我可以在 C 中轉發聲明枚舉嗎?

Patricia Arquette
發布: 2024-12-11 00:27:14
原創
866 人瀏覽過

Can I Forward Declare Enums in C   and How?

在C 中轉發聲明枚舉:限制和解決方法

在C 中,轉發聲明枚舉以前是不可能的,因為枚舉的大小取決於它的內容。然而,隨著 C 11 的引入,只要明確指定枚舉的大小,前向聲明就成為可能。

問題陳述:

最初的問題出現了當嘗試透過以下方式轉發聲明枚舉時:

enum E;

void Foo(E e);

enum E {A, B, C};
登入後複製

此程式碼被拒絕

解釋:

在 C 03 及更早版本中,不允許前向聲明枚舉,因為編譯器需要知道枚舉的大小才能儲存它的值。枚舉的大小取決於其枚舉值的數量和類型。如果沒有此訊息,編譯器無法為枚舉分配記憶體。

C 11 及以上版本中的解:

在C 11 及更高版本中,前向聲明枚舉可以透過明確指定列舉的大小來實現。這可以使用枚舉來完成:語法,其中 ;是枚舉的基礎類型,例如 unsigned int 或 unsigned Short。

例如:

enum Enum : unsigned int; // Forward declaration with an underlying type
void Foo(Enum e);

// Definition of the enum in a separate source file
enum Enum {
    VALUE1, VALUE2, VALUE3
};
登入後複製

此程式碼現在將成功編譯。

私有枚舉值的注意事項:

在提到的特定場景中,枚舉值應該保密,前瞻性聲明方法仍然可行。枚舉可以在頭文件中私有聲明並在實作文件中內部定義,而不會將枚舉值暴露給客戶端。

但是,需要注意的是,前向聲明不會阻止訪問內的枚舉值相同的翻譯單元(即相同的源文件或編譯在一起的文件集)。因此,仍然可以從有權存取頭文件的程式其他部分存取枚舉值。

以上是我可以在 C 中轉發聲明枚舉嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板