1

C99 で導入されたブール型のサポートが、言語自体の機能ではなくプリプロセッサを使用するのはなぜですか? 具体的には、次の理由があります。

#define bool    _Bool
#define true    1
#define false   0

では<stdbool.h>なく:

typedef _Bool bool;
enum { false = 0, true = 1 };

列挙型は好みの問題と見なすことができると思います。しかし - typedef がないのはなぜですか?

4

1 に答える 1

2

C11 仕様のセクション 7.18/3 から:

#if残りの 3 つのマクロは、前処理ディレクティブでの使用に適しています。

仕様リストtruefalseおよび__bool_true_false_are_defined.

bool仕様では、(7.18/4 で) マクロ、trueおよびfalseマクロがプログラムによって未定義である可能性があることも引き続き述べられています。

それらを未定義にすることに関する最後の部分は、C99が公開されたときに多くのレガシーコードが独自の定義とブール型と値のバリエーションを使用していたためです。したがって、既存のコードが無効になることはありません。したがって、それらはマクロであるため、プリプロセッサ条件で使用でき、プログラムによって未定義にすることができます。

于 2018-03-14T14:05:17.257 に答える