★エラー★


エラーと一口に言っても、いくつかの種類に分けることができます。

1.コンパイルエラー:コンパイル時に表示されるエラー

2.リンクエラー:ビルド時に表示されるエラー

3.実行時エラー:コンパイルやビルド時には問題なかったのに、実行すると発生するエラーです。

4.論理エラー:文法等は合っていても、論理的に間違っているケースです。

コンパイルエラーやリンクエラーは文法エラーとも言います。

それぞれのケースを見てみましょう。


コンパイルエラー


<sample program col009-01>

#include <stdio.h>

int main(void)
{
    int a;

    scanf("%d", &a);

    printf("%d", a)

    return 0;
}

<実行結果>

  error C2143: 構文エラー: ';' が 'return' の前にありません。

これは、「;(セミコロン)」を忘れた時に起こるエラーです。

コンパイルすると、’;’がありませんといったエラーが発生し、実行出来ません。


リンクエラー


<sample program col009-02>

#include <stdio.h>

int mian( void)
{
    int a;

    scanf("%d", &a);

    printf("%d", a);

    return 0;
}

<実行結果>

  error LNK2019: 未解決の外部シンボル _main が関数 "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) で参照されました。

ぱっと見ただけでは分かりづらいですが、「main」の綴りが「mian」になっています。

リンクエラーも実行は出来ません。


実行時エラー


こちらを見てください。

本編のプログラムですが、コンパイルやビルド(リンク)は問題ないのですが、実行するとエラーになります。


論理エラー


実は、このエラーが一番厄介なのです。

なぜかと言うと、「考え方」が間違っているからです。

文法的な間違いは、コンピュータで判断できます。

しかし、「考え方」についてはコンピュータは判断できません。

例えば、ある数を2で割った余りを表示しようとプログラムを組んだとします。

次のプログラムを見てください。


<sample program col009-03>

#include <stdio.h>

int main(void)
{
    int data = 15;

    printf("%d\n", data / 2);

    return 0;
}

<実行結果>

7
続行するには何かキーを押してください・・・

結果として表示したいのは、「15を2で割った余り」ですから、「1」なのですが、「7」と表示されます。

当たり前と思うかもしれませんが、余りを出したいのであれば「%」を使えば良いのです。

間違って「/」を使っているのが、エラーの原因です。

論理エラーとは、「人間の間違い」です。

コンピュータは言われたことを実行しているに過ぎません。

人間のやりたいことを察することは出来ないのです。

上のプログラムは簡単な例なので、すぐに直せると思いますが、複雑なプログラムの場合、どこの「考え方」が間違っているのか探すのに苦労することがほとんどです。

特に人間は「これが正しい!」と思い込んで作ることが多いので、間違いに気づけません。

プログラミングとは、コンピュータに問題解決の手順を教えること、だと言う事をしっかりと理解してください。

あくまでも、大事なのは人間なのです。


ブラウザの戻るボタンで戻ってください。