17

次の define ステートメントは C で有効ですか?

#define TRUE FALSE
4

2 に答える 2

32

プリプロセッサ マクロは単純に置き換えられることを覚えておく必要があります。あなたがする場合例えば

#define TRUE FALSE

次に、プロセッサは、定義されているTRUEものに置き換えられることがわかったすべての場所を単純に置き換えます。FALSE

だから確かにそれは良い定義です。はい、プログラムのワークフローが変更される可能性が高く、おそらく非常に予期しない方法で、未定義の動作が発生する可能性さえあります。

于 2013-09-19T12:11:45.880 に答える
4

TRUEが定義されている場合は、 が既に定義されていることを期待する必要が あるためFALSEです。したがって、この場合、これは再定義となり無効になります。インターンにとどまる場合#define TRUE FALSE、標準では有効ですが、私が想像できるすべての論理によれば無効になります。

しかし、私がすでによく見た方法は次のとおりです。

#define FALSE 0
#define TRUE !FALSE
于 2013-09-19T12:12:31.960 に答える