
6日でできる 新C言語入門|初心者のためのC言語エラー対策
エラーは失敗ではなく、上達へのヒント。
C言語のエラーメッセージを読み解いて、落ち着いて直せる力を身につけよう。
C言語を学んでいると、必ずエラーやバグに出会います。最初は赤い文字や英語のメッセージが表示されるだけで、不安になるかもしれません。しかし、エラーはプログラムが間違っている場所や原因を教えてくれる大切な手がかりです。
プログラミングでは、最初から一度も間違えずに完成させることのほうが少ないです。タイプミス、セミコロンの付け忘れ、関数名の間違い、変数名の間違い、計算式の勘違いなど、さまざまな原因で問題が起こります。大切なのは、エラーが出たときに慌てず、原因を1つずつ確認して修正していくことです。
C言語のエラーには、コンパイル時に見つかるもの、リンク時に見つかるもの、実行中に発生するもの、プログラムは動くけれど結果が間違っているものなどがあります。特に初心者のうちは、エラーとバグを同じものとして考えがちですが、実際には少し意味が違います。
エラーは、文法ミスや関数名の間違いなど、コンパイラやリンカが見つけてくれる問題です。一方、バグは、プログラムが実行できても期待どおりに動かない問題です。つまり、エラーは比較的見つけやすい問題で、バグは動作確認やデバッグによって見つける必要がある問題と考えると分かりやすいです。
この記事では、C言語のエラーがどのように発生するのか、Visual Studio 2026などの開発環境で表示されるエラーメッセージをどう読むのか、エラーとバグはどう違うのか、デバッグでは何を確認すればよいのかを、初心者向けにやさしく解説していきます。
C言語ではエラーに出会うのが自然
C言語は、記法に厳密なプログラミング言語です。セミコロンが1つ足りない、関数名のつづりを間違える、ダブルクオーテーションを閉じ忘れる、波かっこの対応が合わないなど、小さな違いでもエラーになります。
これは不便に感じるかもしれませんが、コンパイラが間違いを見つけて教えてくれるという意味では、とてもありがたい仕組みです。エラーメッセージを読むことで、プログラムのどこがC言語のルールに合っていないのかを確認できます。
| よくある原因 | 内容 |
|---|---|
| 関数名のタイプミス | printfを別のつづりで書いてしまう |
| セミコロンの付け忘れ | 文の終わりが分からなくなる |
| 括弧の閉じ忘れ | 丸かっこや波かっこの対応が崩れる |
| 文字列の閉じ忘れ | ダブルクオーテーションが足りない |
| 変数名の間違い | 宣言した名前と使用した名前が一致しない |
| ヘッダーファイルの不足 | 使いたい関数の情報が読み込まれていない |
初心者の段階では、エラーが出るたびに落ち込む必要はありません。むしろ、エラーを1つずつ直す経験を通して、C言語の書き方が身についていきます。
エラーが出たときは、まずエラーメッセージを確認します。英語で表示されることも多いですが、すべてを完璧に読む必要はありません。最初は、行番号、関数名、エラーコード、どの単語が問題になっているかを見るだけでも十分です。
図:エラーは修正の手がかりになる

この図から分かること
この図から分かるのは、エラーが出たときの流れです。C言語では、コードを書く、コンパイルする、エラーメッセージを確認する、原因を探す、修正するという作業を繰り返します。
エラーは、学習を止めるものではなく、間違いを見つけるための案内です。どの行で問題が起きているのか、どの関数や記号が関係しているのかを確認することで、修正の方向が見えてきます。
関数名の間違いで発生するエラー
C言語では、関数名を正しく書く必要があります。たとえば、文字列を表示するprintf関数の名前を間違えると、コンパイルやリンクの段階でエラーになります。
次のプログラムでは、画面にメッセージを表示する処理を書いていますが、2つ目の表示処理で関数名を間違えています。
プロジェクト/ファイル名: Lesson13_1/main.c
#include <stdio.h>
int main(void) {
// 最初のメッセージを表示する
printf("エラー確認の練習をします。\n");
// 関数名を間違えているため、ビルド時にエラーになる
printg("次のメッセージを表示します。\n");
return 0;
}実行時のエラーメッセージ例(Visual Studioの場合)
コード 説明
LNK2019 未解決の外部シンボル _print が関数 _main で参照されました。
LNK1120 1 件の未解決の外部参照このプログラムでは、printfと書くべきところをprintgと書いています。C言語にはprintgという標準関数はありません。そのため、Visual Studio 2026では、環境や設定によって次のようなエラーメッセージや警告が表示される場合があります。
| 表示される可能性がある内容 | 意味 |
|---|---|
| 警告 C4013 | 関数が未定義のまま使われている可能性がある |
| エラー LNK2019 | 未解決の外部シンボルが参照された |
| エラー LNK1120 | 未解決の外部参照が残っている |
表示内容はVisual Studioの設定やC言語の扱い方によって変わることがあります。ただし、注目したいポイントは共通しています。関数名printgが見つからない、または定義されていないということです。
初心者のうちは、エラーコードだけを見ると難しく感じます。しかし、エラーメッセージの中に自分が書いた関数名が出てきた場合、そのつづりをまず確認すると原因を見つけやすくなります。
エラーメッセージを見るときのポイント
エラーメッセージは、最初は読みにくく感じるかもしれません。特にVisual Studioでは、コンパイルエラー、警告、リンクエラーなどがまとめて表示されることがあります。
見るときは、次の順番で確認すると落ち着いて対応できます。
| 確認する項目 | 見るポイント |
|---|---|
| エラーコード | C4013、LNK2019などの識別番号 |
| 説明文 | 未定義、参照、構文エラーなどの内容 |
| 関数名や変数名 | 自分が書いた名前が表示されていないか |
| 行番号 | どのあたりに問題があるか |
| 最初のエラー | 後続エラーより先頭の原因を優先する |
エラーが複数表示される場合でも、すべてが別々の原因とは限りません。1つのタイプミスが原因で、関連するエラーが複数表示されることがあります。そのため、最初に表示されたエラーや、もっとも具体的な関数名が出ているメッセージから確認するのがおすすめです。
今回の例では、printgという関数名が問題です。C言語の標準出力で文字を表示する関数はprintfなので、つづりを修正します。
エラーを修正したプログラム
関数名を正しく修正すると、プログラムはビルドできるようになります。
プロジェクト/ファイル名: Lesson13_1/main.c
#include <stdio.h>
int main(void) {
// 最初のメッセージを表示する
printf("エラー確認の練習をします。\n");
// 正しい関数名でメッセージを表示する
printf("次のメッセージを表示します。\n");
return 0;
}実行結果
エラー確認の練習をします。
次のメッセージを表示します。修正後は、2行のメッセージが正しく表示されます。printf関数のつづりが正しくなったことで、コンパイラやリンカが関数を正しく扱えるようになります。
このように、エラーの原因は意外と小さな入力ミスであることが多いです。特に関数名、変数名、セミコロン、括弧、ダブルクオーテーションは丁寧に確認しましょう。
エラーにはいくつかの種類がある
C言語のエラーは、発生するタイミングによっていくつかに分けて考えられます。すべてを最初から厳密に覚える必要はありませんが、どの段階で問題が起きているのかを意識すると、原因を探しやすくなります。
| 種類 | 発生するタイミング | 例 |
|---|---|---|
| コンパイルエラー | ソースコードを機械語に変換する前後 | 文法ミス、セミコロン不足、型の不一致 |
| リンクエラー | 複数の部品を結合して実行形式を作るとき | 関数が見つからない、定義が不足している |
| 実行時エラー | プログラムを動かしている最中 | 0除算、不正なメモリアクセス |
| 論理エラー | 実行はできるが結果が間違う | 計算式のミス、条件式の勘違い |
コンパイルエラーやリンクエラーは、プログラムが実行される前に見つかります。一方、実行時エラーや論理エラーは、実際にプログラムを動かしてから気づくことがあります。
C言語の学習では、まずコンパイルエラーに慣れることが大切です。エラーメッセージを読み、原因となる行を探し、1つずつ直していく経験が、プログラミング力を伸ばしてくれます。
エラーとバグの違い
エラーとバグは似た言葉として使われることがありますが、初心者のうちから違いを意識しておくと理解しやすくなります。
エラーは、主にコンパイラやリンカが見つけてくれる問題です。文法ミスや関数名の間違いなど、C言語のルールに合わない書き方があると、ビルドできずにエラーとして表示されます。
一方、バグは、プログラムが動いても期待した結果にならない問題です。文法としては正しく、コンパイルも実行もできるのに、計算結果が違う、条件分岐が想定と逆になる、表示内容がおかしいといった問題がバグです。
| 用語 | 内容 | 例 |
|---|---|---|
| エラー | コンパイラやリンカが指摘してくれる問題 | 関数名のタイプミス、セミコロン不足 |
| バグ | プログラムは動くが、期待どおりではない問題 | 計算式の間違い、条件式のミス |
| 実行時エラー | 実行中に発生する重大な問題 | 0で割る、不正なメモリアクセス |
| 警告 | エラーではないが注意が必要な問題 | 型変換、未使用変数など |
エラーは比較的見つけやすいです。なぜなら、コンパイラやVisual Studioが表示してくれるからです。しかし、バグはプログラムが実行できてしまうことが多いため、自分で動作確認をする必要があります。
図:エラーとバグの違い

この図から分かること
この図から分かるのは、エラーとバグでは見つかり方が違うという点です。
エラーは、ビルド時にコンパイラやリンカが見つけてくれることが多く、エラーメッセージを手がかりに修正できます。一方、バグはプログラムが実行できても結果が間違っている場合があり、テストやデバッグによって自分で確認する必要があります。
バグは実行できるからこそ見つけにくい
バグの難しいところは、プログラムが一見正しく動いているように見える場合があることです。文法としては間違っていないため、コンパイルエラーになりません。しかし、計算式や条件式の考え方が間違っていると、期待と異なる結果になります。
次のプログラムは、合計点と人数から平均点を表示するつもりで作られています。しかし、計算式に問題があります。
プロジェクト/ファイル名: Lesson13_2/main.c
#include <stdio.h>
int main(void) {
// 合計点と人数を用意する
int total = 270;
int count = 3;
// 平均点を求める計算式にミスがある
int average = total * count;
// 計算結果を表示する
printf("平均点は%d点です。\n", average);
return 0;
}実行結果
平均点は810点です。このプログラムは、文法としては正しいため、ビルドも実行もできます。しかし、平均点として810点と表示されるのは明らかに不自然です。合計点270点を3人で割るので、期待する平均点は90点です。
このような問題がバグです。コンパイラは、total * countという式そのものを文法ミスとは判断しません。掛け算もC言語として正しい計算だからです。そのため、期待する結果と実際の結果を見比べて、開発者が気づく必要があります。
バグを修正したプログラム
計算式を見直し、平均点を求める処理として正しい式に修正します。
プロジェクト/ファイル名: Lesson13_2/main.c
#include <stdio.h>
int main(void) {
// 合計点と人数を用意する
int total = 270;
int count = 3;
// 合計点を人数で割って平均点を求める
int average = total / count;
// 計算結果を表示する
printf("平均点は%d点です。\n", average);
return 0;
}実行結果
平均点は90点です。修正後は、期待どおり平均点が90点と表示されます。このように、バグを見つけるには、表示された結果が本当に正しいかを確認することが大切です。
C言語では、プログラムが実行できたからといって、必ず正しいとは限りません。計算結果、条件分岐、繰り返し回数、表示内容などを確認し、想定と一致しているかを見る必要があります。
バグを見つけるための確認ポイント
バグを見つけるには、プログラムの途中の値や処理の流れを確認することが大切です。特に計算結果がおかしい場合は、入力値、中間結果、最終結果を分けて確認すると原因を見つけやすくなります。
| 確認する内容 | 見るポイント |
|---|---|
| 入力値 | 変数に入っている値が想定どおりか |
| 計算式 | 足し算、引き算、掛け算、割り算の使い方が正しいか |
| 条件式 | 条件の向きや比較演算子が合っているか |
| 繰り返し回数 | ループの開始値や終了条件が正しいか |
| 表示結果 | 期待する出力と一致しているか |
初心者のうちは、printf関数を使って途中の値を表示する方法が分かりやすいです。変数の値を確認することで、どの時点で想定と違う値になっているのかを調べられます。
Visual Studio 2026のデバッガを使えば、ブレークポイントを置いてプログラムを一時停止し、変数の値を確認することもできます。
デバッグとは何か
デバッグとは、プログラムのエラーやバグを見つけて修正する作業のことです。Debugのbugは、プログラムの不具合を表す言葉として使われます。つまり、デバッグは不具合を取り除く作業と考えると分かりやすいです。
デバッグには、いくつかの方法があります。エラーメッセージを読む、printf関数で値を表示する、Visual Studioのブレークポイントを使う、変数の値を確認する、処理を1行ずつ進めるなどです。
| デバッグ方法 | 内容 |
|---|---|
| エラーメッセージを読む | コンパイルエラーやリンクエラーの原因を探す |
| printfで確認する | 変数の値や処理の到達状況を表示する |
| ブレークポイントを使う | 指定した行でプログラムを一時停止する |
| ステップ実行する | 1行ずつ処理を進めて流れを確認する |
| 変数を見る | 実行中の値が想定どおりか確認する |
C言語の学習では、最初から高度なデバッグ機能をすべて使う必要はありません。まずは、エラーメッセージを読むことと、printf関数で値を確認することから始めるとよいでしょう。
Visual Studio 2026で使えるデバッグの基本
Visual Studio 2026には、デバッグを助ける機能が用意されています。たとえば、ブレークポイントを設定すると、プログラムを指定した行で一時停止できます。停止した状態で、変数の値や処理の流れを確認できます。
ブレークポイントは、コードエディタの左側の余白をクリックすることで設定できます。実行中にその行へ到達すると、プログラムが一時停止します。
| 機能 | 役割 |
|---|---|
| ブレークポイント | 指定した行で実行を止める |
| ステップオーバー | 1行ずつ処理を進める |
| ローカル変数表示 | 変数の現在値を確認する |
| ウォッチ | 特定の変数や式を監視する |
| コールスタック | 関数の呼び出し状況を確認する |
デバッグ機能を使うと、プログラムがどの順番で動いているのか、変数がどのタイミングで変化しているのかを確認できます。特にバグの原因を探すときに役立ちます。
図:デバッグで原因を探す流れ

この図から分かること
この図から分かるのは、デバッグではプログラムをただ実行するだけでなく、途中で止めながら状態を確認できるという点です。
ブレークポイントを設定すると、指定した行でプログラムを一時停止できます。その状態で変数の値を見たり、1行ずつ処理を進めたりすることで、どこで想定と違う動きになっているのかを調べられます。バグを見つけるためには、処理の流れと変数の値を落ち着いて確認することが大切です。
エラーメッセージを読むコツ
エラーメッセージは英語で表示されることが多いため、初心者には難しく見えます。しかし、すべての文章を完璧に理解しなくても、見るべきポイントを押さえれば原因を探せます。
まず、エラーが発生した行番号を確認します。次に、メッセージの中に自分が書いた関数名や変数名が出ていないかを見ます。さらに、syntax、undeclared、undefined、expectedなどの単語がある場合は、文法ミス、未宣言、未定義、必要な記号の不足などが疑われます。
| 英語表現の例 | よくある意味 |
|---|---|
| syntax error | 文法エラー |
| undeclared identifier | 宣言されていない名前を使っている |
| undefined reference | 定義が見つからない参照がある |
| expected | 必要な記号や構文が不足している |
| missing | 何かが足りない |
| unresolved external symbol | リンク時に関数やシンボルが見つからない |
英語が苦手な場合は、翻訳ツールを使っても問題ありません。ただし、翻訳された文章だけで判断するのではなく、エラーが指している行や関数名も一緒に確認しましょう。
初心者がよく出会うエラー
C言語の入門段階でよく出会うエラーには、一定のパターンがあります。これらを知っておくと、エラーが出たときに原因を予想しやすくなります。
| エラーの原因 | 確認する場所 |
|---|---|
| セミコロンの付け忘れ | printf文やreturn文の末尾 |
| 関数名の入力ミス | printf、scanfなどのつづり |
| 変数名の入力ミス | 宣言した名前と使っている名前 |
| ダブルクオーテーションの閉じ忘れ | 文字列の開始と終了 |
| 波かっこの不足 | { と } の対応 |
| ヘッダーファイル不足 | #include <stdio.h>など |
| 全角記号の混入 | セミコロン、括弧、ダブルクオーテーション |
特に全角記号の混入は、日本語入力を使っていると起こりやすいミスです。見た目が似ていても、C言語では半角の記号でなければ正しく認識されません。
エラーを直すときの手順
エラーを直すときは、やみくもにコードを書き換えるのではなく、順番に確認していくことが大切です。原因が分からないまま複数の場所を変更すると、別の問題が増えてしまうことがあります。
| 手順 | 内容 |
|---|---|
| 1 | エラーメッセージを確認する |
| 2 | 行番号や関数名を見る |
| 3 | 直前の行も確認する |
| 4 | タイプミスや記号の不足を探す |
| 5 | 1つ修正したら再ビルドする |
| 6 | 残ったエラーを再確認する |
エラーは、表示された行そのものではなく、直前の行が原因になっていることもあります。たとえば、前の行でセミコロンを忘れると、次の行でエラーが表示される場合があります。
そのため、エラーが出た行だけでなく、その前後も確認するのが大切です。
printfで途中の値を確認する
バグを見つけるときには、printf関数で途中の値を表示する方法が役立ちます。変数の値が正しいか、計算前後でどう変化しているかを確認できます。
たとえば、平均点の計算結果がおかしい場合、total、count、averageをそれぞれ表示すると、どこで不自然な値になっているかを確認できます。
| 確認したいこと | printfで見る内容 |
|---|---|
| 変数に正しい値が入っているか | totalやcountの値 |
| 計算結果が合っているか | averageの値 |
| 条件分岐が通っているか | 分岐内でメッセージを表示 |
| 繰り返し回数が正しいか | ループ内で回数を表示 |
printfによる確認は簡単に試せるため、初心者にも使いやすいデバッグ方法です。ただし、確認用に追加したprintfは、最終的に不要になったら整理するとプログラムが読みやすくなります。
エラーやバグに強くなる習慣
C言語のエラー対策で大切なのは、日頃の書き方と確認の習慣です。こまめに保存し、少し書いたらビルドし、エラーが出たらすぐ確認するようにすると、原因を見つけやすくなります。
長いプログラムを一気に書いてからビルドすると、エラーがたくさん出て、どこから直せばよいか分かりにくくなります。初心者のうちは、短く書いて、こまめに確認することがとても大切です。
| 習慣 | 効果 |
|---|---|
| 少しずつ書く | エラーの原因を絞りやすい |
| こまめにビルドする | 早い段階でミスに気づける |
| エラーメッセージを読む | 原因を自分で探す力がつく |
| 変数名を分かりやすくする | 入力ミスや意味の混乱を減らせる |
| インデントを整える | 波かっこの対応や処理範囲が見やすい |
| 実行結果を確認する | バグに気づきやすい |
エラーやバグを完全になくすことは難しいですが、見つけやすくすることはできます。読みやすいコードを書くこと、こまめに確認すること、表示されたメッセージを落ち着いて読むことが、エラー対策の基本です。
エラーは学習を進めるための大切な経験
C言語を学び始めたばかりのころは、エラーが出るたびに作業が止まってしまうように感じるかもしれません。しかし、エラーを直す経験そのものが、プログラミングの大切な練習です。
関数名を間違えたら、関数名を正確に書く意識が身につきます。セミコロンを忘れたら、文の終わりを確認する習慣がつきます。計算結果が違ったら、式の意味や変数の値を確認する力が育ちます。
C言語では、コンパイラが教えてくれるエラーと、自分で確認して見つけるバグの両方に向き合う必要があります。最初は難しく感じても、少しずつエラーメッセージの読み方やデバッグの流れに慣れていけば、落ち着いて修正できるようになります。
プログラムが一度で動かなくても、それは珍しいことではありません。エラーを読み、原因を探し、修正し、もう一度実行する。この繰り返しが、C言語の理解を深めてくれます。初心者のうちは、エラーが出た回数ではなく、エラーを1つ直せた経験を大切にしていきましょう。
