タイトルが示すように、使用の違いは何だろうと思っていました
#if
DoWork();
#else
DoAnotherWork();
#endif
と
if (debug)
DoWork();
else
DoAnotherWork();
if (debug)
DoWork();
else
DoAnotherWork();
上記のコードがコンパイルされ、実行時に条件がチェックされます。
#if
DoWork();
#else
DoAnotherWork();
#endif
これらのステートメントは、コンパイル時にチェックされます。
したがって、#if条件が真の場合、DoWork(); コンパイルされるか、そうでなければDoAnotherWork(); コンパイルされます。前の例のように、ifステートメントを含むすべてのコードがコンパイルされます。
プリプロセッサディレクティブでこれを読んでください
最初はPreprocessor Directiveで、2 番目はLogical statementです。
最初のバージョンはプリプロセッサディレクティブを使用します。これらは、コンパイラ自体が特定のステートメントのみをコンパイルするための命令です。結果の実行可能ファイルには、コンパイルされたステートメントのみが含まれます。したがって、条件はコンパイル時に評価できるものでなければなりません。
2番目のバージョンは実行時に評価されます。コンパイラーは、条件を評価するためのロジックだけでなく、すべてのステートメントをコンパイルしif
ます。すべてのステートメントは、結果の実行可能ファイルに含まれます。また、実際に実行されるステートメントは、コードの実行時に決定されます。