if
または#if
両方を条件チェックに使用できることを学びました。を使用して条件を確認できるif
のに、なぜプリプロセッサを使用するのでしょう#if
か。
#if
の代わりに使用すると、コードにどのような違いがありif
ますか?
どちらを使用するのが良いですか、またその理由は何ですか?
if
または#if
両方を条件チェックに使用できることを学びました。を使用して条件を確認できるif
のに、なぜプリプロセッサを使用するのでしょう#if
か。
#if
の代わりに使用すると、コードにどのような違いがありif
ますか?
どちらを使用するのが良いですか、またその理由は何ですか?
if
と#if
は異なる目的を持つ異なるものです。
このステートメントを使用するif
と、実行時に条件が評価され、両方の分岐のコードがコンパイル済みプログラム内に存在します。条件は、変数の状態などのランタイム情報に基づく場合があります。if
プログラムの標準的なフロー制御用です。
プリプロセッサの を使用する#if
と、条件はコンパイル時に評価され (元々これはコンパイル時より前でしたが、最近ではプリプロセッサは通常コンパイラの一部になっています)、false 分岐のコードはコンパイルされたプログラムに含まれません。 . #define
条件は、コンパイル時の情報 (定数など) にのみ基づくことができます。#if
コンパイル時の環境ごとに異なるコードを使用するためのものです (たとえば、Windows と *nix でコンパイルするための異なるコード、そのようなもの)。
#if
1 つはコンパイル フェーズ ( ) で使用され、もう 1 つはランタイム フェーズ ( if
)で使用されるため、どちらを使用するのが良いかはわかりません。
#if 1
printf("this code will be built\n");
#else
printf("this code will not\n");
#endif
上記のコードをビルドしてみるとgcc -E
、コンパイラが以下のみを含む別のコードを生成することがわかります。
printf("this code will be build\n");
もう一方の printf は、新しいコード (プリ プロセッサ コード) には存在せず、プログラム バイナリにも存在しません。
結論: は#if
コンパイル フェーズでif
処理されますが、通常はプログラムの実行時に処理されます。
#if 0
コンパイラがコードをコンパイルするのを避けるために、コードの一部で を使用できます。この部分にコメントしたようです
例
int main(void) {
printf("this code will be build\n");
#if 0
printf("this code will not\n");
#endif
}
それは同等です
int main(void) {
printf("this code will be built\n");
/*
printf("this code will not\n");
*/
}
おい、どっちも違うぞ
#if
コンパイル時に条件が true かどうかをテストします。if
実行時に評価されます。コンパイル時に条件の結果がわかっている場合は #if を使用し、実行時まで結果が不明な場合は通常を使用する必要があります。
#if DEBUG
コンパイル時にデバッグビルドを作成していることを知っています
if (date == DateTime.Today)
何日かにもよる