logo

paizaがお届けする、テック・キャリア・マネジメント領域の「今必要な情報」を届けるWebメディア

【初心者向け】C言語でよく発生する4つのエラーを解説

【初心者向け】C言語でよく発生する4つのエラーを解説

プログラミングの勉強をしたことが少しでもある方は、みなさん

  • 苦労してコードを書いたのにエラーが出てうまく実行できない
  • エラーの意味がわからなくてどこをどう修正したらよいかわからない

といった経験をしたことがあるでしょう。

とくにC言語は比較的コードが多くなりがちで、構文上の守らなければならない作法も多いため、コードを実行しようとしたときのエラーも発生しがちな言語です。

「エラーメッセージを見ても全部英語でなにが書いてあるかわからない!」という方も多いかと思いますが、よく発生するエラーにはいくつかのパターンがあります。それさえ把握してしまえば、プログラミング初心者でも「このあたりの行でこういうミスをしているのかな?」と素早く的確な対処ができるようになるでしょう。

今回は、プログラミング初心者向けにC言語におけるエラーのパターンとその対処方法について解説します。

C言語を勉強しているプログラミング初心者の方や、エラーに悩まされている方の参考になればと思います。


C言語とは

C言語は1970年代に登場した、50年の歴史を持つプログラミング言語です。のちに登場したC++、Java、C#のいわゆる「C系」と言われる言語のもとにもなっています。

C言語はコンパイル言語です。コンパイル言語とは、簡単に言うとすべてのコードをコンパイラが一気に機械語に翻訳して一気に実行するプログラミング言語のことです。これに対してPythonなどのインタプリタ言語は、コードを実行する際に一行ずつ機械語に翻訳しています。コンパイル言語はインタプリタ言語と比べて実行速度がかなり速いという特徴があります。

またC言語はマルチプラットフォームに対応した言語で、環境に依存せずに実行することが可能です。今でもOSや組み込みシステムなどの開発現場ではC言語が主流ですが、最近はIoTやAI、ロボット制御などの場面でも使われており、今後も需要がなくなることはないでしょう。

ただプログラミング初心者にとっては、わかりやすく学習しやすいとは言いづらい言語です。とくにメモリ管理やポインタなどは難解に感じる人も多いかと思います。


C言語でよく発生する4つのエラー

ここからは、C言語でよく発生するエラーについて解説します。

C言語では、コードに問題があるとコンパイル時にエラーが発生します。ここでは代表的なエラーとその内容について説明します。

エラーメッセージはすべて英語ですが、それほど難しい文章が出てくるわけではありません。落ち着いて読めば、間違っている箇所と間違っている内容がわかるはずです。よく発生するエラーのパターンを把握しておけば恐ることはありません。

一言でエラーといってもさまざまな種類がありますが、ここではよく発生するエラーを5つご紹介します。

構文エラー(syntax error before ◯◯)

◯◯より前の部分でC言語の文法としておかしな部分がある場合に発生するエラーです。

たとえばセミコロンをつけ忘れていたり、括弧を閉じ忘れていたり、スペルミスをしている場合などによく発生します。

このエラーが出たら、◯◯からさかのぼってコードを確認します。どこかにC言語の文法としては正しくない記述があるはずですから、よく見直して修正しましょう。

たとえば以下のコードは printf("hello world") のあとにセミコロンをつけ忘れているため、「C言語として正しい構文になっていないから実行できない!」と判定されてエラーとなります。

#include <stdio.h>
int main(void){
    printf("hello world")
}

変数の宣言ミス (`変数名' undeclared)

宣言していない変数を使ってしまっている場合に発生するエラーです。

たとえば変数名のスペルを間違っていたり、宣言し忘れている変数を使っていたりする場合によく発生します。

このエラーが出たら該当する変数を宣言し忘れていないか、もしくはスペルを間違えて記載していないか、よく見直してみましょう。

たとえば以下のコードは printf("%sはレベルアップした", player); の前に player という変数を宣言し忘れているため、「そんな変数はない!」と判定されてエラーとなります。

#include <stdio.h>
int main(void){
    printf("%sはレベルアップした", player);
}

セグメンテーションフォルト(Segmentation fault)

Segmentation faultは配列を宣言した際に指定した範囲を超えてアクセスした場合や、アクセスできないメモリ領域を参照しようとした場合などに起こります。

Segmentation faultが発生した場合は、配列に対して指定するインデックス値がおかしくなっていないか、指定するリストを間違えていないか、もしくは初期化していないポインタを参照しようとしていないか確認しましょう。

たとえば以下のコードでは、dataという配列には要素が5つしかないのにそれ以上のインデックス値を指定して表示させようとしているため、「アクセスできない!」と判定されてエラーとなります。

#include <stdio.h>
int main(void)
{
    int data[] = {111, 222, 333, 444, 555};
    printf("%d\n", data[10]);
}

型の不一致 (Type mismatch)

変数の型にあわないデータを入れようとした場合などに発生するエラーです。

C言語では、変数を宣言するときは型も宣言する必要があります。(プログラミング言語によっては、この型を指定しなくても変数を宣言できる言語もあります)

そのため変数の型と異なるデータを入れようとすると、このエラーが発生します。

Type mismatchが発生した場合は、変数の型を宣言時に間違えていないか、もしくは指定する変数を間違えていないか確認して修正しましょう。

たとえば以下のコードでは、numという整数型の変数に abc という文字列を入れようとしているため、「そのデータはこの変数に入らない!」と判定されてエラーとなります。

#include <stdio.h>
int main(void)
{
    int num = "abc";


C言語でエラーを減らすには

プログラミングを学ぶ上で、エラーは避けて通れないものです。

プログラミングを学び始めたばかりの初心者はもちろん、ベテランのエンジニア経験者でもさまざまなエラーを出しながら日々プログラミングをしています。

エラーはコードの間違いを指摘してくれる重要なものです。エラーが発生したら「また間違えてしまった」「いやだな」と思うよりも、「修正することでまた一つ知識を身につけられた」「これでもっとよいコードが書けるようになった」と考えるようにするとよいでしょう。

なおケアレスミスによるエラーを減らすには、以下のような対策があります。

変数名や関数名はわかりやすく

たとえばa,b,c…といった変数名やmethod_A,method_Bといった関数名でも、構文としては間違いではありません。しかしこうした変数名・関数名では意図や機能がわからないため、使い方を間違えてなんらかのエラーを発生させる原因となってしまします。

変数や関数を命名する際は、目的や機能などが一目でわかるような名前をつけるようにしましょう。

データの型について理解しておく

どのようなデータ型があるかを理解した上で、どれを使うのが適切かを考えた上でコードを書きましょう。

単純な変数だけでなく、たとえば関数からの戻り値やポイントにも型があります。

ポインタを使う場合は、ポインタの型とポインタが指す変数の型も一致している必要があるため注意しましょう。

コメントで補足する

複雑な処理をしている部分などは、コメントで補足の説明をしておくとどこでなにをしているかがわかりやすくなり、エラーの減少にもつながります。

ただし実務でチーム開発をしている場合、個人個人がそれぞれのルールでコメントをつけてしまうとコメントの付け方に統一感がなくなってしまいます。

これを防ぐために多くの開発チームではコメントやコードの書き方をコーディング規約として定めています。エンジニアとして就職・転職した場合、コメントの書き方などはこのコーディング規約に従うようにしましょう。


C言語でエラーの防ぎ方や対処法が学べる学習コンテンツ

paizaラーニングのC言語入門編

初心者オススメ度:★★★★★

paizaラーニングのC言語入門編は、未経験者でも1回数分程度の動画を見ながらC言語を使った基本的なコードの書き方が学べる講座です。

変数や四則演算、ループ、条件分岐、配列、関数など、ほかのプログラミング言語でも共通する処理の概念はもちろん、ポインタなどのC言語に特化した機能もしっかり学習できます。

また「02:C言語でプログラムを書いてみよう」では構文エラーのもととなる間違えやすいポイントや、「07:ポインタの間違えやすいところ」ではポインタを使う際に発生しがちなミスについて詳しく解説しています。講座の中ではそれぞれの処理を行う際に起こりがちなエラーについても解説がありますので、エラーについて学びたい人にもオススメです。

➜詳細を見る

苦しんで覚えるC言語

初心者オススメ度:★★★★☆

苦しんで覚えるC言語は、長きにわたってC言語を勉強する人たちに活用されている学習サイトです。

単元ごとの練習問題は実行結果を問うものから自分でコードを書いてみるものまで幅広く、Cの基本を体系立てて学べます。

書籍化もしているので、「本を使って勉強したい」という人にもオススメです。

➜詳細を見る

ドットインストール

初心者オススメ度:★★★★☆

ドットインストールのC言語入門は、動画を見ながらC言語が学べる入門講座です。実行環境は自分で準備する必要があります。

ポインタとメモリ、参照渡しなどに関する講座が充実しているため、初心者がつまずきがちな部分も確実に理解しながら進められます。

「C言語を独学で勉強していたけど、ポインタなどで挫折した経験がある…」という人にもオススメです。

➜詳細を見る


エラーを恐れずC言語プログラミングを学んでみよう

ほかの言語では勝手に実行してくれるようなメモリの解放やポインタの操作なども、C言語は自分でコードを書かなければならず、初心者にやさしい言語とは言えないかもしれません。

ただ一度学習しておくと、「コードの裏側でなにが行われているか」を意識できるようになるはずです。

また前述の通り、プログラミングを学ぶ上で、エラーは避けて通れないものです。エラーを恐れずたくさん手を動かしてコードを書き、さまざまなエラーに対処することで着実にプログラミングスキルを身につけていきましょう。

「エラーどころかこれからC言語の学習を始めるところなんだけど」「まずはC言語に触れてみたい」というプログラミング初心者の方には、paizaラーニングのC言語入門編がオススメです。

➜詳細を見る





paizaラーニング」では、未経験者でもブラウザさえあれば、今すぐプログラミングの基礎が動画で学べるレッスンを多数公開しております。

詳しくはこちら

paizaラーニング

paizaのおすすめコンテンツ

“denno2088” プログラミングゲーム「電脳少女プログラミング2088 ─壊レタ君を再構築─」 CGC codemonster プログラミングゲーム「コードモンスター大図鑑 プログラミングでゲットだぜ!」
paiza転職 paiza新卒 EN:TRY paizaラーニング 記事内に記載している情報は、記事公開時点でのものとなります。 Copyright Paiza, Inc, All rights reserved.