17

LLVM プロジェクトのソース コードでは、次のように表示されます。stdbool.h

/* Don't define bool, true, and false in C++, except as a GNU extension. */
#ifndef __cplusplus
#define bool _Bool
#define true 1
#define false 0
#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
/* Define _Bool, bool, false, true as a GNU extension. */
#define _Bool bool
#define bool  bool
#define false false
#define true  true
#endif

最後の 4 行には from の 3 行があり#define X Xます。どうしてそうするか?どんな違いがあるの?trueこれにより、コンパイラーは、たとえば、を単に置き換えることを強制されませんtrueか?

4

3 に答える 3

19

私が考えることができる唯一の理由は、次のようなプリプロセッサステートメントです

#ifdef bool
// do some stuff or define bool
#endif

他のcファイルでは、後でインクルードすると適切に機能し、次のような別の方法でboolを再定義しようとしません

#define bool int

これは最初の定義に干渉します

于 2013-09-01T11:22:44.563 に答える