54

It is unclear to me when using compiler directives which of the below two code snippets is correct/preferred and why. It seems that most developers and Open Source projects I've seen use the first but I have seen the second used frequently as well.

#ifdef DEBUG
[self doSomethingOnlyWhenDebugging];
#endif

VERSUS

#if DEBUG
[self doSomethingOnlyWhenDebugging];
#endif

Which of the above code snippets is preferable for running code only while debugging and why? My guess is that the first will run if DEBUG is defined as TRUE or FALSE where the second will run only if DEBUG is defined and set to TRUE. Is that correct?

4

3 に答える 3

2

DEBUG が定義されているか定義されていないコードを見て、それに応じてコードを記述する必要があります。DEBUG を使用すると、定義されていないか、値 1 で定義されていることがわかります。したがって、#ifDEBUG または#ifdefDEBUG のいずれかが機能します。

あなたの管理下にあるについて#defineは、常に 0 または 1 の値で定義することをお勧めします。その後、 を使用#ifして値を確認できますが、通常の if ステートメントまたはコードを読みやすくする式。また、常に定義されているため、Xcode で「Jump To Definition」を使用して、定義されている場所に移動し、どのように、なぜ設定されているかを確認できます。代わりに、値を指定してもし#defineなく#defineても、それが定義されていない場合、Xcode はソース コードのどこで定義されていないかわかりません。また、スペルミスのある用法を探す機会にもなります。「Jump to Definition」が機能しない場合は、スペルが間違っていることがわかります。

ところで、#ifディレクティブ内では、定義されていないマクロは 0 に置き換えられます。したがって#if、DEBUG が定義されていない場合、または DEBUG が 0 として定義されている場合、DEBUG は機能し、DEBUG が何も定義されていない場合はコンパイルされません。何が間違っているので、修正できます。#ifそういう意味では、コンパイルしない限りは使った方がベターです。

于 2015-03-26T08:35:27.860 に答える