0

booltypedefのコードがあります

typedef enum bool {
    false,
    true,
} bool;

2つのヘッダーファイルで、最終的な親ヘッダーファイルに含まれていない場合、子Cファイルはもちろんbool型を使用できませんが、それを定義するより小さなヘッダーファイルの子は使用できます。

ただし、最終的な親ヘッダーファイルで定義すると、「boolは現在のスコープですでに宣言されています」というより少ないヘッダーファイル定義エラーが発生します。

ブール値がすでに定義されている場合とされていない場合があるプロジェクトに含まれている可能性がある、より少ないヘッダーのソリューションが必要です...これを行うための最良の方法は何ですか?

Ta

4

2 に答える 2

2

まず、C99コンパイラ以降を使用している場合は、で定義されている標準のブール型がすでに存在しstdbool.hます。

true第二に、通常は値に対して直接テストすることを避けることができますfalse。これにより、実際にはコードが少し読みやすくなり、エラーが発生しにくくなることがわかりました(ただし、これは個人的な意見ですが、YMMVです)。

直接の解決策は、typedefをインクルードガードで囲むことです。

#ifndef BOOL_DEFINED
#define BOOL_DEFINED
typedef enum bool {
  false,
  true
} bool;
#endif

これにより、タイプが複数回宣言されるのを防ぎます。ただし、ご存知のとおり、同じ型定義を2つの異なるヘッダーに配置することは、胸焼けのレシピです。定義を独自のヘッダーファイル(上記のインクルードガードを使用)に配置し、必要に応じてそのファイルをインクルードすることをお勧めします。

于 2012-10-01T13:03:14.807 に答える
1

これと他の共有定義を、他の各ヘッダーに含まれるtypes.hヘッダーに分解します。

または、次のようなことを行うことができます

#ifndef BOOL_DEFINED
#define BOOL_DEFINED
typedef enum bool {
    false,
    true,
} bool;
#endif

両方のヘッダーで。

于 2012-10-01T13:00:33.410 に答える