次の define ステートメントは C で有効ですか?
#define TRUE FALSE
プリプロセッサ マクロは単純に置き換えられることを覚えておく必要があります。あなたがする場合例えば
#define TRUE FALSE
次に、プロセッサは、定義されているTRUE
ものに置き換えられることがわかったすべての場所を単純に置き換えます。FALSE
だから確かにそれは良い定義です。はい、プログラムのワークフローが変更される可能性が高く、おそらく非常に予期しない方法で、未定義の動作が発生する可能性さえあります。
TRUE
が定義されている場合は、 が既に定義されていることを期待する必要が あるためFALSE
です。したがって、この場合、これは再定義となり無効になります。インターンにとどまる場合#define TRUE FALSE
、標準では有効ですが、私が想像できるすべての論理によれば無効になります。
しかし、私がすでによく見た方法は次のとおりです。
#define FALSE 0
#define TRUE !FALSE