Cプログラム - はじめのいっぽ
本稿の対象者はプログラミング開発の初心者とする。
学習環境はWindows環境とするが実践環境としてUNIX,特にLinux,bash環境を前提としている。
開発環境を構築する
本稿ではC言語の開発環境としてWindows環境で以下の開発ツールを使用するものとする。
-
Eclipse,CDT
gccが統合環境で使えるし「Pleiades All in One eclipse」(Pleiades - Eclipse プラグイン日本語化プラグイン
)であれば「msys」も付いてくるのでwindowsでunixもどきの環境も経験できる。
インストールも簡単だ。
最初から統合環境を使うのは考えものだと思う人はmsysのシェルを使ってみればよい。
msysにはunixで定番となっているviエディターも付いている。
エディタにemacsを使いたいと考える人はMeadowを併せてインストールすれば良い。 -
Visual C++(Microsoft Visual Studio 2008 Express Edition)
.NETも覚えたいと思う人にはお勧めだ。
プログラミング学習用としては充分すぎる機能を持っている。
インストール方法についてはこのページを参照すると良い。
他にエディタとしてサクラエディタをお勧めする。
秀丸と違って無料だし、grep機能も便利だ。
c/c++のヘルプファイルを以下のリンクよりダウンロードすると役立つ。
msysのシェルからの簡単なプログラムを作成。
msysのシェルよりプログラムを作成して実行をおこなうには以下の手順が必要になる。
- ソースファイルの作成
- コンパイル
- リンク
ソースファイルの作成
ソースファイルとは「ソースコード」とも呼ばれ人間が見て理解できるプログラムが記述してあるテキストファイルである。
msysのhomeデレクトリにエディタを使って定番のコンソールに「Hello World!」と表示する以下のプログラムを作成し「hello.c 」というファイル名にて保存する。
#include <stdio.h> int main() { printf("Hello World!\n"); return 0; }
リンクとコンパイル
プログラムをコンピュータが理解し実行できるようにするにはソースファイルを機械語に翻訳する必要がある。
ソースファイルの拡張子は「c」である。
そのために必要な作業がコパイルという作業であり機械語に翻訳するソフトウェアの事をコンパイラと呼ぶ。
コンパイラにはいろいろなものが存在するがunix上で使用されている代表的なコンパイラは「gcc」である。
「Pleiades All in One eclipse」でもgccが使われている。
コンパイラが出力するファイル通常オブジェクトファイルである。
オブジェクトファイルの拡張子はunixでは「o」がwindowsでは「obj」が使われる事が多い。
プログラムが複雑になってくると複数のソースファイルで一つのプログラムが構成される。
その場合には複数のソースファイルごとにコンパイルが必要であり、コンパイルされた複数オブジェクトファイルを結合する作業が必要になる。
また、ライブラリと呼ばれる開発環境に用意されているプログラムも一緒に結合する必要がある。
この作業の事をリンクと呼び、このために使われるのがリンカーと呼ばれるソフトウェアである。
リンカーによりオブジェクトファイルをリンクすると初めてコンピュータで実行できる実行ファイルが作られる。
実行ファイルの拡張子はunixでは何でもかまわないがwindowsでは「exe」となる。
コンパイル作業は実際にはもっと複雑な作業を必要とする場合もあるが、本稿では初心者プログラマーが対象なのでこれ以上詳しい事は述べない。
msysのシェルより以下のコマンドを実行する。
ここでソースファイル名は先程、作成した「hello.c 」である。
gcc ソースファイ名
gccはコンパイルからリンクまでいろいろな作業を実行させる事ができるがこのようにただ単にソースファイルを指定するとコンパイルからリンクまで実行されて「a.exe」という実行ファイルが作られる。
(通常このファイルは「a.out」であるがWindows上のgccではa.exeとなる。)
ソースファイルをスペースで区切って複数指定する事もできる。
作成されたa.exeを実行すると以下のように「Hello World!」が出力される。
「ls」コマンドを実行してデレクトリのファイルを表示して見ると「a.exe」というファイルが作成されているのがわかる。
尚、常に実行するファイルが常に「a.out」では不便なので、以下のように -o の後に実行ファイルのファイル名を指定する事ができる。
(windowsの場合は実行ファイル名の後に常に拡張子exeが付く。)
gcc ソースファイ名 -o 実行ファイル名
演習問題
- eclipseの統合環境より新しいプロジェクトを作成してhello.cを実行してみる。
この時オブジェクトファイル(拡張子oのファイル)も作成されている事を確認する。 - Visual C++のインストール方法のページの「時計を作ってみましょう」を実行してみる。
-
以下の2つのソースファイルからなるプログラムをmsysのシェルとeclipsより実行してみる。
add.c
#include <stdio.h> int add(int a, int b); int main() { int a = 2, b = 3; printf("%d+%d-%d!\n", a, b, add(a, b)); return 0; }
add_sub.c
int add(int a, int b) { return a + b; }
参考
gccでコンパイルのみを実行してオブジェクトファイルを生成するには「-c」オプションを指定する。
gcc -c ソースファイ名
コンパイルされたオブジェクトファイルをリンクするには、ただ単にオブジェクトファイルを指定してgccを実行すれば良い。
gcc オブジェクトファイル名
お勧めのC/C++の参考書
最後に、私の独断と偏見でお勧めのC/C++の参考書を紹介しておく(異論のある方もおられると思うが)。
初心者には「やさしいC」と「やさしいC++」をお勧めする。
非常に表示が見易くてわかり易くて入門用としてはお勧めだが、内容が若干薄いので他にもう一冊もっと詳しい本が必要。
中級者以上には「C言語入門 (ASCII SOFTWARE SCIENCE Language) 」と「C++ プライマー 」がお勧めだ。
しかし、「C++ プライマー 」は高価なのが欠点だ。
また昔から定番のC言語のバイブル本としては「プログラミング言語C 第2版」がある。
C言語を開発した人が自ら書いた本だ。
これも昔から改定を続けている本で「ANSI C対応 はじめてのC」も良い。
タイトルとは違い初心者用では無いと思うが、内容がコンパクトにまとまっている。
知人の東京理科大の学生の話によると、大学の先生は柴田亡羊さんの本を薦めていたそうな。