情報処理のWeb教科書―IPA情報処理試験対策のお供に!
Windowsでも使えるフリーソフトのgccコンパイラで学ぶC言語入門用のオリジナルテキストをまとめています。フリーソフトのgccコンパイラのインストール方法や基本文法はもちろんですが、分割コンパイルやヘッダーファイルの作成方法など入門者にとって気になる内容もまとめています。
この記事の目次です。
1. C言語とは
2. gccコンパイラのインストール
3. C言語プログラミング入門(構文)
4. C言語プログラミング基礎(標準ライブラリ)
5. C言語プログラミング中級(gccコンパイラなど)
6. C++(C言語から派生したC++について)
C言語とは、コンピュータのプログラムを記述するプログラム言語の1つです。 プログラム言語はプログラミング言語とも呼ばれます。
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言語でプログラムを記述したファイル(ソースファイル)を作るだけでは動かすことはできません。 ソースファイルをコンパイラーでコンピュータが実行できる形式のファイルに変換する必要があります。
どのコンパイラがおすすめかと悩みますが、 gccコンパイラは、メジャーなCコンパイラで、WindowsやLinuxなど複数のOSに対応しています。 実務にも使えますし、gccコンパイラを使って学習すると各種OSに対応したプログラムが作れますので、初心者の方がC言語に入門する場合はgccコンパイラがおすすめです。
初心者がC言語に入門する場合はコマンドラインで使用するWindows版のgccがおすすめです。 いきなり高度な統合開発環境を使用するとコンパイル、リンクなどの基本となるプログラムの実行の仕組みが理解しにくくなり、コンパイラーや開発環境が変わるとつまづいてしまうためです。
Windows版のgccはMinGWに含められています。 MinGWは Minimalist GNU for Windows"の略で、gcc以外にもネイティブのWindowsアプリケーションを開発するために必要な最小限の環境を提供するツールセットがまとめられています。
Windows版のgccコンパイラのMinGWのインストール方法について解説しています。
Linux版のgccのインストール方法についてみていきます。
UbuntsなどDebian系はopt-getでインストールできます。
$ sudo apt-get install gcc
CentOSやFedraなどRed Hat Enterprise Linux系はyumでインストールできます。
$ sudo yum install gcc
Linuxとは、WindowsやMacと同じOSの1つです。読み方はリナックスです。Linuxとはどのようなものかの説明を簡単にまとめています。 またネタとして使える日本産の軽量ディストリビューションのlinuxbeanの情報、コマンドラインの「$」「#」「cd」「~」記号の意味などの入門者にとってよくわからない点をわかりやすくまとめています。
分割コンパイルやユーザ定義のヘッダーファイルの活用などgccコマンドの知識が必要です。 gccコマンドのオプションの知識およびgccコンパイラーの使い方について掘り下げていきます。
C言語のプログラムの書き方から、for文、if文なのど構文、フローチャートの書き方など、C言語プログラミング入門レベルの内容を、 簡単なプログラムなら自由に作成できるレベルを目指して、初歩的なC言語の基本文法についてみていきます。
標準ライブラリの利用方法についてまとめていきます。
標準ライブラリとは、通例的に言語の各実装に備えられているライブラリです。 C言語の標準Cライブラリ(ひょうじゅんシーライブラリ)は、C言語の標準規格で定められた、型・マクロ・関数の集合からなるライブラリです。
stdbool.h関連の関数について見ていきます。
stdbool.hで定義されるbool型です。
gccコンパイラで「error: unknown type name 'bool'」のように表示された場合は「#include <stdbool.h>」が記述されているか確認しましょう。
stdio.h関連の関数について見ていきます。
printf関数は、print formattedの略でプリントエフと呼びます。 C言語の標準入出力ヘッダー (stdio.h)で宣言されている関数で、引数で与えられた書式付きの文字列を、環境によって設定された標準出力(stdout)に出力します。
C言語のfgets関数は、ファイルの内容を1行読み取る機能がある関数です。 この記事ではC言語のfgets関数の使い方について解説しています。
標準Cライブラリ関数のfputs(stdio.h)について見ていきます。
fputs関数を使用することでファイルに1行出力することができます。
#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関連の関数について見ていきます。
文字列はとてもよく使用されるものの、C言語では文字を1つずつ文字配列中に格納していく必要があり面倒です。 このため、文字列の操作を行うためのさまざまな関数が用意されています。 標準ライブラリのstringにはこの文字列操作に関する関数があります。
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関連の関数について見ていきます。
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関数を使用することでC言語のプログラムから外部のプログラムが実行できます。
#include <stdlib.h> int main() { system("notepad"); return 0; }
gccを使用してコンパイルする例を示します。
gcc sample.c
a.exe
実行するとメモ帳が起動します。
gccコンパイラなど、C言語プログラミングの中級レベルの内容をまとめていきます。
Windows APIを使用すれば、C言語でWindowsプログラミングが行えます。
Windows APIを使用してメッセージボックスを表示する例です。
ソースフォルダに以下のサンプルコードを記述したテキストファイルを作成します。
#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とコマンドラインに入力もしくはエクスプローラからマウスでダブルクリックするとメッセージボックスが表示されます。
Windows API関連のコンパイルエラーの例です。
DWORDの定義が見つからない場合に出力されるエラーです。 「windows.h」もしくは「winbase.h」をインクルードする必要があります。
分割コンパイルやユーザ定義のヘッダーファイルの活用などgccコマンドの知識が必要です。 gccコマンドのオプションの知識およびgccコンパイラーの使い方について掘り下げていきます。
makeを使用することでコンパイル、リンクなどのMakefileにビルド手順を記述して、ビルド作業の効率化が行えます。
Windowsでは「mingw32-make」コマンドを使用することでmakeが行えます。
mingw32-make -f Makefile.mingw
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は、デバックツールの1つで、ブレークポイントというコードの位置を設定し、そこで一時停止し、変数の値を確認するなどプログラマの顕微鏡みたいなツールです。 アセンブリ言語の解説も行いつつ、レジスタ表示やcore解析などgdbコマンドの使い方についてまとめています。
Windowsでも使えるフリーソフトのg++コンパイラで学ぶC++入門用のオリジナルテキストをまとめています。 C++は、C言語から派生した言語となり、本サイトの「フリーソフトのgccコンパイラでコンパイルして学ぶC言語入門テキスト」の続きという形でまとめています。
プログラミング作法などプログラミングについてまとめています。Python、C言語、流れ図などプログラミングのオリジナル入門テキスト問形でまとめています。
Copyright (C) 2010-2023 情報処理のWeb教科書. All Rights Reserved. Loarding…