46

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

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

4

2 に答える 2

43

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

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

于 2011-12-23T15:30:16.553 に答える
6

あなたが与えた文脈では、それらは同じです.1つのマクロ識別子の存在をチェックしているだけです.

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

于 2011-12-23T15:32:57.370 に答える