エラーと一口に言っても、いくつかの種類に分けることができます。
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」と表示されます。
当たり前と思うかもしれませんが、余りを出したいのであれば「%」を使えば良いのです。
間違って「/」を使っているのが、エラーの原因です。
論理エラーとは、「人間の間違い」です。
コンピュータは言われたことを実行しているに過ぎません。
人間のやりたいことを察することは出来ないのです。
上のプログラムは簡単な例なので、すぐに直せると思いますが、複雑なプログラムの場合、どこの「考え方」が間違っているのか探すのに苦労することがほとんどです。
特に人間は「これが正しい!」と思い込んで作ることが多いので、間違いに気づけません。
プログラミングとは、コンピュータに問題解決の手順を教えること、だと言う事をしっかりと理解してください。
あくまでも、大事なのは人間なのです。
ブラウザの戻るボタンで戻ってください。