1. ホーム
  2. ios

[解決済み] #ifdef DEBUG 対 #if DEBUG

2022-02-13 14:57:52

質問

コンパイラディレクティブを使用する際、以下の2つのコードスニペットのうちどちらが正しいか/好ましいか、またその理由は不明です。私が見たところ、ほとんどの開発者やオープンソースプロジェクトは前者を使用しているようですが、後者も頻繁に使用されているのを見かけました。

#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif

ヴァーサス

#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif

デバッグ中のみコードを実行する場合、上記のコードスニペットのうちどちらが好ましいですか?私の推測では、最初のものはDEBUGがTRUEまたはFALSEに定義されている場合に実行され、2番目のものはDEBUGが定義されTRUEに設定されている場合にのみ実行されると思われます。これは正しいですか?

どのように解決するのですか?

ご指摘の通りです。 #if DEBUG は評価されません。 DEBUG は以下のように定義されます。 0 .

それぞれをどのように使うかですが、基本的には #ifdef のみを必要とするものには 加える コードで、デバッグログの追加など、プリプロセッサの定義が存在する場合に使用します。もし、値を検査して、異なるコンパイル経路をたどる必要があるなら、私なら 0 または 1 . その良い例が TARGET_IPHONE_SIMULATOR はiOSプロジェクトでは常に定義されていますが、唯一 1 は、シミュレータ用にコンパイルしている場合です。