0

たとえば、次のコードをご覧ください。

#ifdef THIS_IS_NOT_DEFINED
//lots of code here...
#endif

「大量のコード」により、結果の実行可能ファイルにメガバイトが追加される可能性があるとします。THIS_IS_NOT_DEFINED が実際に定義されていない場合、コンパイラは含まれているすべてのコードを .exe に書き込みますか? ほとんどのコンパイラは、これに対して同様の手順に従いますか?

4

2 に答える 2

4

C プリプロセッサは #ifdef を処理します。定義されていない場合、コンパイラ自体はコードを認識しないため、.exe に入る方法がありません。

于 2012-05-15T23:38:13.660 に答える
2

C++ コンパイルは、多くの段階で機能します。まず、#includes、#defines などを展開してコードを前処理します。これはテキスト レベルで機能し、ソース コードを実際に変更することと同じです。

この場合、コンパイラはプリプロセッサ#ifdefブロックからコードを最適化します。これは、プリプロセッサが実行されると、そのコードがソース ファイルからスプライスされるためです。つまり、実際にコンパイルとコード生成を行うコンパイラの部分は、コードのその部分をまったく認識しません。まるで存在しないかのようです。

お役に立てれば!

于 2012-05-15T23:38:32.230 に答える