Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

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;

多くのコンパイラはゼロ除算に対して警告を出しますが、これはあくまで警告であり、ビルド自体は完了します。しかし、実際にプログラムを実行するとゼロ除算が原因で異常終了(クラッシュ)します。これが典型的な実行時エラーです。

まとめ

コンパイル時エラーは「コードを書いている段階でコンパイラが見つけてくれるエラー」、実行時エラーは「プログラムを動かしてみないと分からないエラー」と覚えておくとよいでしょう。コンパイル時エラーは早期に発見・修正できる一方、実行時エラーはテストやデバッグを通じて丁寧に潰していく必要があります。

  1. Javaのthisとsuperの違いを徹底解説!比較表とサンプルコードで学ぶ正しい使い分け

    Javaには、現在のクラスのインスタンスを表すthisと、親クラス(スーパークラス)を表すsuperという2つの特別なキーワードが用意されています。どちらもインスタンスに紐づくキーワードである点では共通していますが、その役割や利用できる場面には大きな違いがあります。本記事では、比較表と実際に動作するサンプルコードを通して、両者の違いをわかりやすく解説します。 thisとsuperの主な違い No.比較項目thissuper 1表す対象現在のクラス(自分自身)のインスタンスへの参照を表します。親クラス(スーパークラス)側のインスタンス部分への参照を表します。 2コンストラクタとの関係

  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: