実行時とコンパイル時の違いは何ですか?
ベストアンサー1
コンパイル時間と実行時間の違いは、頭の固い理論家が「位相の区別これは、特にプログラミング言語の知識があまりない人にとっては、習得するのが最も難しい概念の1つです。この問題に取り組むには、次のような質問をするのが役立つと思います。
- プログラムはどのような不変条件を満たしていますか?
- この段階で何が問題になるのでしょうか?
- フェーズが成功した場合、事後条件は何ですか (何がわかっていますか)?
- 入力と出力はありますか?
コンパイル時間
- プログラムは不変条件を満たす必要はありません。実際、整形式のプログラムである必要はまったくありません。この HTML をコンパイラに入力して、それが吐き出すのを見ることもできます...
- コンパイル時に問題が発生する可能性があるもの:
- 構文エラー
- 型チェックエラー
- (まれに)コンパイラがクラッシュする
- コンパイラが成功した場合、何がわかるでしょうか?
- プログラムはよく構成されており、どの言語でも意味のあるプログラムでした。
- プログラムの実行を開始することは可能です。(プログラムはすぐに失敗する可能性がありますが、少なくとも試すことができます。)
- 入力と出力は何ですか?
- 入力は、コンパイルされるプログラムと、コンパイルするためにインポートする必要のあるヘッダー ファイル、インターフェイス、ライブラリ、またはその他の魔法でした。
- 出力は、アセンブリ コード、再配置可能なオブジェクト コード、または実行可能プログラムになることが期待されます。または、何か問題が発生した場合、出力は一連のエラー メッセージになります。
実行時間
- プログラムの不変条件については何も知りません。不変条件はプログラマが入れたものになります。実行時の不変条件はコンパイラだけで強制されることはめったになく、プログラマの助けが必要です。
問題になる可能性があるのは実行時エラーです:
- ゼロ除算
- ヌルポインタの逆参照
- メモリ不足
プログラム自体によって検出されるエラーが発生することもあります。
- 存在しないファイルを開こうとしています
- ウェブページを見つけようとしたところ、URLが正しく形成されていないことが判明した
- 実行が成功すると、プログラムはクラッシュせずに終了します(または続行されます)。
- 入力と出力は完全にプログラマー次第です。ファイル、画面上のウィンドウ、ネットワーク パケット、プリンターに送信されるジョブなど、何でもかまいません。プログラムがミサイルを発射する場合、それは出力であり、実行時にのみ発生します :-)