web-dev-qa-db-ja.com

Cの「ifndef」と「if!defined」の違いは?

同じCソースファイルで_#ifndef ABC_と#if !defined (ABC)を見ました。

それらの間には微妙な違いがありますか? (それがスタイルの問題である場合、なぜ誰かが同じファイルでそれらを使用するのですか?)

43
onemach

いいえ、そのように使用しても2つの間に違いはありません。後者の形式(defined()を使用)は、最初の_#if_または後続の_#Elif_条件の1つがより複雑なテストを必要とする場合に役立ちます。 _#ifdef_は引き続き機能しますが、その場合は#if defined()を使用した方がわかりやすいかもしれません。たとえば、複数のマクロが定義されているかどうか、または特定の値と等しいかどうかをテストする必要がある場合などです。

(ファイルで両方を使用する)差異は、前述のように、一貫性がないために、使用法の特定の微妙な要素、または単に不適切な方法に依存する可能性があります。

39
Dan Fego

あなたが与えたコンテキストでは、それらは同じです:1つのマクロ識別子の存在をチェックしているだけです。

ただし、#ifフォームを使用すると、式を評価できるので便利です。

6
Jerry Penner