ホームページ > バックエンド開発 > 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 以降のバージョンでは、列挙型の前方宣言列挙型のサイズを明示的に指定することで可能になります。これは enum を使用して行うことができます: 構文。 は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
};
ログイン後にコピー

このコードは正常にコンパイルされます。

プライベート列挙値に関する考慮事項:

前述の特定のシナリオでは、ここでenum 値は非公開にしておく必要がありますが、前方宣言アプローチは引き続き実行可能です。 enum は、クライアントに enum 値を公開せずに、ヘッダー ファイルでプライベートに宣言し、実装ファイルで内部的に定義できます。

ただし、前方宣言によって enum 内の enum 値へのアクセスが妨げられないことに注意することが重要です。同じ翻訳単位 (つまり、同じソース ファイルまたは一緒にコンパイルされたファイルのセット)。したがって、ヘッダー ファイルにアクセスできるプログラムの他の部分から列挙値にアクセスすることは可能です。

以上がC で列挙型を前方宣言できますか?またその方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート