Cプログラムにおけるコンパイル時エラーと実行時エラーの違いを徹底解説
エラーや例外とは、コードの実行が何らかの原因で中断され、期待していた結果が最終的に得られなくなる現象を指します。エラーが発生・検出されるタイミングによって、コンパイル時エラー(Compile Time Error)と実行時エラー(Runtime Error)の2種類に分類できます。
本記事では、両者の重要な違いを比較表とサンプルコードを使ってわかりやすく解説します。
| No. | 項目 | コンパイル時エラー | 実行時エラー |
|---|---|---|---|
| 1 | 対象 | 主に構文や意味(セマンティクス)に関する誤りに対して発生します。 | コードを実行している最中に発生するエラーです。 |
| 2 | 検出 | 開発段階でコンパイラによって検出されます。 | コンパイラでは検出できず、プログラムの実行時に初めて判明します。 |
| 3 | 修正 | コードの開発段階で修正できます。 | 一度プログラムを実行してエラーを特定した後に行う必要があります。 |
コンパイル時エラーと実行時エラーの具体例
コンパイル時エラーの例
次のコードでは、printf文の末尾にセミコロン(;)が抜けています。
CompileDemo.c
#include <stdio.h>
int main(void) {
int x = 100;
int y = 155;
/* セミコロンが抜けている */
printf("%d", (x, y))
}
出力
error: expected ';' before '}' token
このように構文上の誤りがあると、コンパイルの時点でエラーが報告され、実行ファイルは生成されません。セミコロンを追加すれば簡単に解消できます。
実行時エラーの例
次のコードでは、ゼロによる除算(n / 0)を行っています。構文的には正しいためコンパイル自体は通りますが、実行時に問題が発生します。
RuntimeDemo.c
#include <stdio.h>
int main(void) {
int n = 9;
int div = 0;
div = n / 0;
printf("result = %d", div);
}
出力
warning: division by zero [-Wdiv-by-zero]
div = n / 0;
多くのコンパイラはゼロ除算に対して警告を出しますが、これはあくまで警告であり、ビルド自体は完了します。しかし、実際にプログラムを実行するとゼロ除算が原因で異常終了(クラッシュ)します。これが典型的な実行時エラーです。
まとめ
コンパイル時エラーは「コードを書いている段階でコンパイラが見つけてくれるエラー」、実行時エラーは「プログラムを動かしてみないと分からないエラー」と覚えておくとよいでしょう。コンパイル時エラーは早期に発見・修正できる一方、実行時エラーはテストやデバッグを通じて丁寧に潰していく必要があります。
-
Javaのthisとsuperの違いを徹底解説!比較表とサンプルコードで学ぶ正しい使い分け
Javaには、現在のクラスのインスタンスを表すthisと、親クラス(スーパークラス)を表すsuperという2つの特別なキーワードが用意されています。どちらもインスタンスに紐づくキーワードである点では共通していますが、その役割や利用できる場面には大きな違いがあります。本記事では、比較表と実際に動作するサンプルコードを通して、両者の違いをわかりやすく解説します。 thisとsuperの主な違い No.比較項目thissuper 1表す対象現在のクラス(自分自身)のインスタンスへの参照を表します。親クラス(スーパークラス)側のインスタンス部分への参照を表します。 2コンストラクタとの関係
-
Pythonで現在時刻と指定時刻の差を求めるプログラムの作り方
はじめに 現在の時刻と指定された時刻との差を求めたい場合、時と分をパラメータとして受け取る関数を定義すると便利です。この関数は、2つの時刻を分単位に変換して差を計算し、その結果を時間と分の形式で出力します。 以下に具体的な実装例を示します。 サンプルコード def difference_time(h_1, m_1, h_2, m_2): t_1 = h_1 * 60 + m_1 t_2 = h_2 * 60 + m_2 if (t_1 == t_2): print(2つの時刻は同じです) return else: