[ Index | Prev | Next ]

C/C++ 分科会 - 第二章

C言語の文法

さて、初回でいきなり説明も無くプログラムを出してみたりしましたが。
いきなりあんなの出されても何が何やらかもしれません。(じゃぁやるなよ
という訳で、今回から特に文法を中心に解説に入っていきたいと思います。
今回メインなのは…

main

C言語の基本となるプログラムを書いてみます。

main ()
{
}

え?これだけ?
そうなんです、実はこれは何もしないプログラムです。(つまり実行するといきなり終了するだけ。
(コンパイルするときに何らかの警告がでるかも知れませんが今は無視してください。)

では、mainを削るとどうなるでしょうか。今度はコンパイル自体が出来なくなると思います。
C言語では、処理はmain () の中で行われます。 いろいろ書かれてあっても、まずはmainを探せばそこからプログラムが始まっていると分かる訳です。
逆に、mainが無いとC言語として働きません。コンパイラにも依りますが、「mainが無いよ」等のエラーが返されます。

さて、C言語では上のmainの中に実行させたいことを詰め込んでいく訳ですが、
プログラミングでまずやることと言ったらなぜか「文字を表示してみる」こととなっているようなのでお約束に従ってまずやってみたいと思います。

main ()
{
	printf ("プログラミング言語C");
}

実はこのプログラム、たぶんほとんどのコンパイラでは警告はでてもコンパイル自体は出来るのですが(Cygwinのgccでは警告すら無し)、
文法的には間違っているのです。
(ちなみにこれを実行すると画面に単に「プログラミング言語C」とだけ表示されて終了します。(あまり進化してないですね(汗)
BASICなどのように言語自体に文字を表示したりする機能が付いている言語とは違い、
C言語には文字を表示したり、ファイルを開いたりする機能がありません。
なので本来は上に出てきたようなprintfの様な、BASICで言うところの命令(C言語では関数と呼ばれます)は自分で用意する必要があるのですが、
それだとあまりに不便なので標準ライブラリという物が付いています。最初から使える命令セットのような物です。(ちょっと間違った説明ですけどね…
printfは標準ライブラリにあるので、どんな環境のCコンパイラでも使うことが出来るようになっています。
しかし本当は標準ライブラリでも、ちゃんと「これから標準ライブラリを使いますよ」と指示した方が良いので、上のプログラムは次のようになります。
(実は指示しなくても必ず含まれるようになっているんですけどね)

#include <stdio.h>
main ()
{
	printf ("プログラミング言語C");
}

さて、また新しい文が出てきました。
#includeと言うのは「外部から情報を取り込め」という指示です。この場合はstdio.h(STanDard InputOutput)というファイルを標準ライブラリから取り込めと言うことですね。
(printfは標準出力(今回の場合は画面)に出力するという関数なので、stdio.hをincludeする訳です)

関数 〜printf〜

今まで関数自体について説明してきませんでしたが、まずいろいろ始める前にこれから入ってみたいと思います。(入門本とかだと結構後で来るので横暴かも知れない(汗)
関数といってもまだmainとprintfでていませんね。
え、mainも関数なのかって? そうです、mainも関数なんですが、mainはC言語では必ず最初に実行されることが決まっている特別な関数なのです。
で、関数とはなんぞや。
端的に言うと、「(必要があれば)データを渡して、内部で何らかの加工を施したり処理を行ったりして(必要があれば)データを返す」 という処理郡のことです。
BASICで言うと(こればっかりですが)サブルーチンに似ていますね。
関数を使う利点・理由として、

さて、関数というのは次のような形をしています。

int power (int data)
{
	return data*data;
}

さて、どんどん始めて見る文が追加されていっていますが、焦らないで行きましょう。
intというのは扱うデータのを示していて、整数であるということを示しています。(これは後述の変数の際に説明します。)
つまり、powerは整数を受け取って、その整数を2乗して整数として返すという関数なのです。
関数の処理は { で始まり } で終わります。
powerでは return で、関数の呼び出し側に値を返していますが、例えば単に2乗値を表示するだけなら返さなくても大丈夫です。
ただ、powerの様にint型のデータを返す と決めている場合はreturnで整数を返さないとコンパイラから警告されます。
returnが無い場合は } が来た時点でその関数から抜けて呼び出し側に戻ります。
mainの場合はOSに処理が戻る訳です。

…そろそろ変数の説明無しで話を進めるのがきつくなってきたので変数の説明に入りたいと思います。(先にしろよ〜

変数 〜データの入る箱〜

C言語に限らず、プログラミング言語という物には決まって変数という物があります。
簡単に言うとデータを入れるための箱です。
C言語では中に入れることの出来るデータの種類によってというものがあります。
例えば、既に出てきているint型。これは整数が入ります。逆に整数以外を入れようとするとエラーになります。
変数には次のような種類があります。

char 文字型
int 符号付き整数
float 浮動小数点数
double 倍精度浮動小数点数
void 型を指定しない

変数は使う前に宣言しないといけません。
例えば int型のiという変数を使いたければ次のように宣言します。

	int i;

変数の名前として使えるのはアルファベットと数字、_(アンダーバー)のみです。残念ながらひらがなとかはダメですね。
あと、先頭に数字を使うのもダメです。_なら可ですけど。
さて、変数に値を入れる際は次のように代入します。

	int i;
	i = 1;
	char c;
	c = 'A';

文字型のデータは ' で括ってください。
さて、Cには「文字列」を入れる変数の型がありません。どうするのかというと、配列というものを使うのですが、それはまた後述ということで。

おわりに

今回はここまでです。かなり端折ってます。(というか手抜きしすぎなのでたぶん改訂されます…時間がなかったんですよ(言い訳
ではまた次回。