2011-10-07 11 views
18

いくつかのクラスを見ると、私は "pound if"または#ifの構文で少し混乱します。例えば目的C "#if"構文

:対

#if someConstant == someNumber 
    do something 
#elif 
    etc 

if (someConstant == someNumber) 
    do something 
else if { 
    do more stuff 
} 

はどのような違いだし、なぜ#ifを使うのか?

答えて

28

#ifなどはプリプロセッサディレクティブです。つまり、コンパイルする前に処理され、実行時には処理されません。これは、例えば、あなたがdebugのために構築したときにのみ、コンパイル、デバッグの振る舞いを定義する際に、役立つことができないrelease

#if DEBUG 
    #define ISRelease(x) [x release] 
#else 
    #define ISRelease(x) [x release], x = nil 
#endif 

(。ジェフラマルシュのblogのコード礼儀)そうしないこの方法でアプリを提出し、デバッグコードの負荷を削除する直前にあなたの全体のアプリケーションのコードを通過する必要があります。これは、これらの指令の使用例のほんの一例です。

+0

#ifは#ifdefと同じですか? –

+0

ませ - ん、あなたが(「定義されている場合」) '#のifdef'して上記'#のif'を交換した場合DEBUG'が既に定義されている '場合は、条件付きにのみ成功します。逆の結果を返す '#のifndef'プリプロセッサディレクティブもあります(「定義されていない場合」)。 – Stuart

10

#ifは、プリプロセッサー指示文です。

ifは、の言語構成体です。

違いは、最終的なプログラムがコンパイルされる方法です。 #ifを使用すると、そのディレクティブの結果は最終的なプログラムにそれらの行に含まれます。言語構成を使用すると、構成に渡される式はランタイムで評価され、のコンパイル時間はではありません。

0

前の答えは、専門用語にデバッグから#ifな用途をカバーし、もう一つの一般的な使用法を欠場:#ifは、コードの大きな塊をコメントするために使用されます。これは、プログラマーがすでにコメントを含むものを取り除く必要がある場合に便利です。

#if 0 
    a lof of C code with /* style */ comments included 
#endif 

私はこれをたくさん使っています。他#ifよりも利点とコメントスタイル - それは本当に、その中に壊れた構文の中で最も気にしません。