たとえば、次のコードをご覧ください。
#ifdef THIS_IS_NOT_DEFINED
//lots of code here...
#endif
「大量のコード」により、結果の実行可能ファイルにメガバイトが追加される可能性があるとします。THIS_IS_NOT_DEFINED が実際に定義されていない場合、コンパイラは含まれているすべてのコードを .exe に書き込みますか? ほとんどのコンパイラは、これに対して同様の手順に従いますか?
たとえば、次のコードをご覧ください。
#ifdef THIS_IS_NOT_DEFINED
//lots of code here...
#endif
「大量のコード」により、結果の実行可能ファイルにメガバイトが追加される可能性があるとします。THIS_IS_NOT_DEFINED が実際に定義されていない場合、コンパイラは含まれているすべてのコードを .exe に書き込みますか? ほとんどのコンパイラは、これに対して同様の手順に従いますか?
C プリプロセッサは #ifdef を処理します。定義されていない場合、コンパイラ自体はコードを認識しないため、.exe に入る方法がありません。
C++ コンパイルは、多くの段階で機能します。まず、#include
s、#define
s などを展開してコードを前処理します。これはテキスト レベルで機能し、ソース コードを実際に変更することと同じです。
この場合、コンパイラはプリプロセッサ#ifdef
ブロックからコードを最適化します。これは、プリプロセッサが実行されると、そのコードがソース ファイルからスプライスされるためです。つまり、実際にコンパイルとコード生成を行うコンパイラの部分は、コードのその部分をまったく認識しません。まるで存在しないかのようです。
お役に立てれば!