情報処理のWeb教科書―IPA情報処理試験対策のお供に!

C言語―フリーソフトのgccコンパイラでコンパイルして学ぶC言語入門テキスト

トップ プログラミング C言語

Windowsでも使えるフリーソフトのgccコンパイラで学ぶC言語入門用のオリジナルテキストをまとめています。フリーソフトのgccコンパイラのインストール方法や基本文法はもちろんですが、分割コンパイルやヘッダーファイルの作成方法など入門者にとって気になる内容もまとめています。

▲記事トップへ

目次

この記事の目次です。

1. C言語とは
2. gccコンパイラのインストール
3. C言語プログラミング入門(構文)
4. C言語プログラミング基礎(標準ライブラリ)
5. C言語プログラミング中級(gccコンパイラなど)
6. C++(C言語から派生したC++について)

もっと知識を広げるための参考
更新履歴

1. C言語とは

C言語とは、コンピュータのプログラムを記述するプログラム言語の1つです。 プログラム言語はプログラミング言語とも呼ばれます。

C言語とはどのようなプログラム言語か

C言語は、1972年に米国AT&T社ベル研究所のD.M.RitchieとB.W.Kernighanにより開発され、WindowsやLinuxなどのOSやApache HTTP ServerやNginx、MySQLといったミドルウェアなどさまざまな主要ソフトウェアの開発に使われています。

プログラム言語の形式的には、事前にコンピュータが読み込める形式にコンパイルを行って、プログラムを実行する形式の手続型言語に分類されます。

プログラム言語

プログラム言語とは、ソースプログラムの記述ルールのことをいいます。 プログラミング言語とも言います。C言語の他に、アセンブリ、C++、C#、Java、PHP、Python、Rubyなど多数あります。

なお、プログラム言語について詳しくは、詳細のページで解説しています。

詳細

C言語とコンパイラー

C言語などのプログラム言語のコードはソースファイルに記述されます。 ソースファイルは、コンピュータで実行できるプログラムのもととなるテキスト形式のコードを記述したファイルで、 C言語で記述したソースファイルは人間がプログラムを記述するためのもので実際には動かすことはできません。

コンピュータでプログラムを動かすためにはコンピュータ用のコードに変換する必要があります。 変換にはコンパイラという変換プログラムを使用します。

C言語はコンパイラが必要
C言語はコンパイラが必要!

ソースファイルと実行形式ファイル

コンパイラでソースファイルからコンピュータが実行できるプログラムに変換します。 そして、ソースファイルをコンパイルしてできた実行可能なファイルのことを実行形式ファイルといいます。

2. gccコンパイラのインストール

前述のとおり、C言語のプログラムはC言語でプログラムを記述したファイル(ソースファイル)を作るだけでは動かすことはできません。 ソースファイルをコンパイラーでコンピュータが実行できる形式のファイルに変換する必要があります。

おすすめのコンパイラはgcc

どのコンパイラがおすすめかと悩みますが、 gccコンパイラは、メジャーなCコンパイラで、WindowsやLinuxなど複数のOSに対応しています。 実務にも使えますし、gccコンパイラを使って学習すると各種OSに対応したプログラムが作れますので、初心者の方がC言語に入門する場合はgccコンパイラがおすすめです。

初心者がC言語に入門する場合はWindows版のgcc

初心者がC言語に入門する場合はコマンドラインで使用するWindows版のgccがおすすめです。 いきなり高度な統合開発環境を使用するとコンパイル、リンクなどの基本となるプログラムの実行の仕組みが理解しにくくなり、コンパイラーや開発環境が変わるとつまづいてしまうためです。

Windows版のgccはMinGWに含められています。 MinGWは Minimalist GNU for Windows"の略で、gcc以外にもネイティブのWindowsアプリケーションを開発するために必要な最小限の環境を提供するツールセットがまとめられています。

Windows版のgccのMinGWのインストール

Windows版のgccコンパイラのMinGWのインストール方法について解説しています。

詳細

Linux版のgccのインストール

Linux版のgccのインストール方法についてみていきます。

Debian系

UbuntsなどDebian系はopt-getでインストールできます。

$ sudo apt-get install gcc

CentOSなどRed Hat系

CentOSやFedraなどRed Hat Enterprise Linux系はyumでインストールできます。

$ sudo yum install gcc

参考)Linux

Linuxとは、WindowsやMacと同じOSの1つです。読み方はリナックスです。Linuxとはどのようなものかの説明を簡単にまとめています。 またネタとして使える日本産の軽量ディストリビューションのlinuxbeanの情報、コマンドラインの「$」「#」「cd」「~」記号の意味などの入門者にとってよくわからない点をわかりやすくまとめています。

詳細

参考)gcc

分割コンパイルやユーザ定義のヘッダーファイルの活用などgccコマンドの知識が必要です。 gccコマンドのオプションの知識およびgccコンパイラーの使い方について掘り下げていきます。

詳細

3. C言語プログラミング入門(構文)

C言語のプログラムの書き方から、for文、if文なのど構文、フローチャートの書き方など、C言語プログラミング入門レベルの内容を、 簡単なプログラムなら自由に作成できるレベルを目指して、初歩的なC言語の基本文法についてみていきます。

詳細

4. C言語プログラミング基礎(標準ライブラリ)

標準ライブラリの利用方法についてまとめていきます。

標準ライブラリとは

標準ライブラリとは、通例的に言語の各実装に備えられているライブラリです。 C言語の標準Cライブラリ(ひょうじゅんシーライブラリ)は、C言語の標準規格で定められた、型・マクロ・関数の集合からなるライブラリです。

stdbool.h

stdbool.h関連の関数について見ていきます。

bool

stdbool.hで定義されるbool型です。

error: unknown type name 'bool'

gccコンパイラで「error: unknown type name 'bool'」のように表示された場合は「#include <stdbool.h>」が記述されているか確認しましょう。

stdio.h

stdio.h関連の関数について見ていきます。

printf関数

printf関数は、print formattedの略でプリントエフと呼びます。 C言語の標準入出力ヘッダー (stdio.h)で宣言されている関数で、引数で与えられた書式付きの文字列を、環境によって設定された標準出力(stdout)に出力します。

詳細

fgets関数

C言語のfgets関数は、ファイルの内容を1行読み取る機能がある関数です。 この記事ではC言語のfgets関数の使い方について解説しています。

詳細

fputs関数

標準Cライブラリ関数のfputs(stdio.h)について見ていきます。

fputs関数を使用することでファイルに1行出力することができます。

サンプルコード(sample.c)
#include <stdio.h>

int main(void) {
    FILE *fp;
    fp = fopen("outputfile.txt", "w");

    if (fp == NULL) {
        printf("file open errer.\n");
        return 1;
    }

    fputs("Hello World!!\n", fp);
    fclose(fp);
    return 0;
}

コンパイル

gccを使用してコンパイルする例を示します。

gcc sample.c
実行
a.exe

実行すると「outputfile.txt」というファイルができます。 ファイルの中には「Hello World!!」と出力されます。

string.h

string.h関連の関数について見ていきます。

文字列関連ライブラリ(string.h)

文字列はとてもよく使用されるものの、C言語では文字を1つずつ文字配列中に格納していく必要があり面倒です。 このため、文字列の操作を行うためのさまざまな関数が用意されています。 標準ライブラリのstringにはこの文字列操作に関する関数があります。

strcpy関数

strcpy関数について解説していきます。

書式

strcpy関数の書式は以下です。

char *strcpy(char *s1, const char *s2);

文字型配列 *s1 に文字列 *s2 を '\0' までコピーします。 '\0' もコピーするので s1 はその分も考えて大きさを宣言しておかなければなりません。 もし、s1 と s2 が重なっている場合には動作は未定義となります。

サンプル
#include <stdio.h>
#include <string.h>

int main() {
      char str[20];
      strcpy(str, "Hello World!\n");
      printf(str);
}
コンパイル

gccを使用してコンパイルする例を示します。

gcc sample.c
実行
a.exe

実行すると「Hello World!!」と出力されます。

stdlib.h

stdlib.h関連の関数について見ていきます。

free関数

free関数は、calloc関数、malloc関数、realloc関数 を呼び出して割り当てたメモリブロックを解放します。

サンプル
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int *p = malloc(sizeof(int));
	if(p==NULL){
     	printf("メモリ確保に失敗しました。\n");
		return 1;
	}
	*p = 999;
	printf("アドレス(%p)の変数の値は、%dである。\n", p,*p);
	free(p);	/* mallocで確保したメモリ領域を開放 */
	return 0;
}
コンパイル

gccを使用してコンパイルする例を示します。

gcc sample.c
実行

「アドレス(16進数の数字)の変数の値は、999である。」というように出力されます。

a.exe
アドレス(0x8739008)の変数の値は、999である。

system関数

system関数を使用することでC言語のプログラムから外部のプログラムが実行できます。

サンプル
#include <stdlib.h>

int main() {
	system("notepad");
	return 0;
}
コンパイル

gccを使用してコンパイルする例を示します。

gcc sample.c
実行
a.exe

実行するとメモ帳が起動します。

5. C言語プログラミング中級(gccコンパイラなど)

gccコンパイラなど、C言語プログラミングの中級レベルの内容をまとめていきます。

Windows API

Windows APIを使用すれば、C言語でWindowsプログラミングが行えます。

メッセージボックスの表示

Windows APIを使用してメッセージボックスを表示する例です。

サンプルソース(sample.c)

ソースフォルダに以下のサンプルコードを記述したテキストファイルを作成します。

#include<windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow) {
    MessageBox(NULL, TEXT("メッセージ"),TEXT("タイトル"), MB_OK);
    return 0;
}
コンパイル方法

コマンドプロンプトでソースファイルを保存したフォルダに移動しgccコマンドを実行してコンパイルします。

>cd test
>gcc sample.c

実行方法

a.exeというファイルができたフォルダにコマンドプロンプトで移動し、 a.exeとコマンドラインに入力もしくはエクスプローラからマウスでダブルクリックするとメッセージボックスが表示されます。

C言語で作成したメッセージボックスの表示例
C言語で作成したメッセージボックスの表示例

Windows API関連のコンパイルエラー

Windows API関連のコンパイルエラーの例です。

error: 'DWORD' does not name a type

DWORDの定義が見つからない場合に出力されるエラーです。 「windows.h」もしくは「winbase.h」をインクルードする必要があります。

gcc

分割コンパイルやユーザ定義のヘッダーファイルの活用などgccコマンドの知識が必要です。 gccコマンドのオプションの知識およびgccコンパイラーの使い方について掘り下げていきます。

詳細

make

makeを使用することでコンパイル、リンクなどのMakefileにビルド手順を記述して、ビルド作業の効率化が行えます。

Windows環境

Windowsでは「mingw32-make」コマンドを使用することでmakeが行えます。

mingw32-make -f Makefile.mingw

Makefileの基本

Makefileの基本は以下です。「出力ファイル」に「必要なファイル」を「:」以降に指定して、その後に「タブ」を入れて、出力するコマンドを定義します。

「出力ファイル」: 「必要なファイル」
「タブ」「コマンド」

一番簡単なMakefileの例

以下はsample.cをコンパイルして、sample.exeを作成するルールを定義した一番簡単なMakefileの例です。

sample.exe : sample.c
	gcc sample.c -o sample.exe

1行目のように「出力:入力」と書いて、その次の行に実行するコマンドを記述します。 注意点は2行目のコマンドのところの初めはタブを挿入します。スペースではなくタブです。

オブジェクトファイルを作成してからリンクする例

以下はsample.cをコンパイルしてsample.oを作成して、sample.oからsample.exeを作成するMakefileの例です。

sample.exe : sample.o
	gcc sample.o -o sample.exe

sample.o : sample.c
	gcc -c sample.c

sample.oがないときは「sample.o : sample.c」を実行してから「sample.exe : sample.o」が実行されます。

オブジェクトファイルを削除するコマンドを追加した例

今度はcleanという指定を追加して、古いオブジェクトファイルを削除するコマンドを追加してみます。

sample.exe : sample.o
	gcc sample.o -o sample.exe

sample.o : sample.c
	gcc -c sample.c

clean :
	del *.o

mingw32-make -f Makefile.mingw clean でclean部分が実行できます。

変数の定義

複数記述しているgccの部分など、後でメンテナンスしやすいように変数にすることができます。

CC = gcc

sample.exe : sample.o
	$(CC) sample.o -o sample.exe

sample.o : sample.c
	$(CC) -c sample.c

clean :
	del *.o

gdb

gdbは、デバックツールの1つで、ブレークポイントというコードの位置を設定し、そこで一時停止し、変数の値を確認するなどプログラマの顕微鏡みたいなツールです。 アセンブリ言語の解説も行いつつ、レジスタ表示やcore解析などgdbコマンドの使い方についてまとめています。

詳細

6. C++(C言語から派生したC++について)

Windowsでも使えるフリーソフトのg++コンパイラで学ぶC++入門用のオリジナルテキストをまとめています。 C++は、C言語から派生した言語となり、本サイトの「フリーソフトのgccコンパイラでコンパイルして学ぶC言語入門テキスト」の続きという形でまとめています。

詳細

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

情報処理の知識体系

各試験の問題と解説

ランダム出題・採点アプリ

プログラミング

スポンサーリンク