最初のプログラム
プログラムの起動と終了
まず、最初に何もしないで終了するだけの簡単なプログラムを作成してみましょう。前章の内容に従って、本書のサンプルプログラムを記述するには Windows コンソールアプリケーション用の空プロジェクトを用意してください。通常、ソースファイルの拡張子には c (例えば source.c など)を指定します。
int main(void) { return 0; }
コード1を実行してもコマンドプロンプトには何も表示されません。まずは、このプログラムを書いて正しくビルドできることを確認してください。コードに間違いが無ければ、エラーなくビルドできるはずです。
コンピュータ、そしてプログラミング言語は融通の利かない頑固なところがあります。私たち人間は、文章の中に多少の曖昧さや句読点の打ち間違い、誤字脱字などの記述ミスがあったとしても、前後の文章の流れなどから相手の意図を推論して理解できます。しかし、コンピュータの世界ではわずかな曖昧さや記述ミスさえ許されません。
もし、コードの中にセミコロン ; とコロン : の打ち間違いが 1 つでもあればエラーとなって ビルドできなくなります。実際に、このような単純な打ち間違いは初心者がよく頭を悩ませるエラーの原因となっています。もし、本書のサンプルプログラムを打ち込んでエラーが発生するようであれば、記号の位置や種類も含めて正確に入力できているか確認してください。特に、丸括弧 ( と波括弧 { の間違いや、全角文字が紛れている場合は発見が難しくなるので注意してください。
C 言語のプログラムは、複数の命令を集めた関数(function)と呼ばれるブロックが実行単位となります。従って、アプリケーションが起動したときに最初に実行する関数を用意しなければなりません。プログラムが起動したときに、最初に実行される場所をエントリーポイントと呼びます。
通常、C 言語で書かれたプログラムのエントリーポイントは main() という名前の関数です。アプリケーションが起動すると main() 関数の中の命令が順に実行され、関数の最後まで到達するとアプリケーションが終了します。コード1 の最初の行は、プログラムの開始地点である main() 関数を作成しています。
int main(void);
関数は値を受け取ったり、値を返したりする機能があるため、どのような値を受け取ることができ、どのような値を返すのかを表明する必要があります。このような、関数の名前や受け渡しするデータを表したものを宣言(declaration)と呼びます。
上記のように宣言はセミコロンで終わっていますが、プログラムの中で main() を作るときはコード1のように { } で括って関数の本体を書く必要があります。これを関数の定義(definition)と呼びます。
main() 関数の定義は、以下の形になります。
int main() { この関数が処理する命令 }
関数や宣言と定義に違いについては基礎的な文法を一通り解説した後に、もう一度詳しくご紹介します。まずは C 言語のプログラムは上記のような形で始まると覚えてください。プログラムが起動したときに、実際に CPU によって実行される命令は main() 関数の { } 内に記述します。
コード1 の 3 行目は return 文と呼ばれる命令で、main() 関数を終了して 0 を結果として返しなさいという意味です。この return 文が実行された時点で main() 関数の処理が終わり、アプリケーションも終了します。
ここで返した値は、このプログラムを実行したシステムや別のプログラムに実行結果として渡されます。特に意味のある値を返す必要がない場合は 0 を指定すれば問題ありません。
テキストを表示する
プログラムが意図したとおりに動作しているかどうかを確認するためには、結果を画面に表示する必要があります。そこで、プログラミング言語を学習するときは、最初に必ずテキストを表示する方法を学びます。
コンピュータの世界では、機器の間でデータを受け渡しすることを入出力(input/output)と呼びます。このうち、別の機器に向かってデータを送信することを出力と呼び、別の機器からデータを受信することを入力と呼びます。プログラムで扱っているデータを画面に表示するには、データをディスプレイに出力する必要があります。
画面にテキストを表示するだけのプログラムであれば、とても簡単です。C 言語では 1 行のコードだけで任意のデータを出力できます。
printf("Kitty on your lap");
これで、画面には二重引用符 "" で括ったテキスト Kitty on your lap が表示されます。このコードに含まれている意味を正しく理解することは簡単ではありません。
最初の printf とは、テキストとして画面に表示したいデータを出力する関数の名前です。printf() 関数にデータを渡すと、通常は画面(Windows であればコマンドプロンプト)にテキストとしてデータが表示されるでしょう。二重引用符で囲まれた部分は文字列と呼びます。文字列の内容は任意に変更できます。
#include <stdio.h> int main(void) { printf("Stand by Ready!!\n"); return 0; }
コード2は、コマンドプロンプトに文字列を表示するプログラムです。コードの先頭に #include <stdio.h> が追加されていますが、これは printf() 関数の機能を使うために必要になります。この #include 命令は、コンパイル時に < > 内に指定したファイルをコード内に取り込むという作用があります。#include 命令で別のソースファイルを取り込むことをインクルードすると呼びます。また、stdio.h のような標準機能を利用するためにインクルードするファイルのことをヘッダファイル(header file)と呼びます。
コード2では stdio.h というヘッダファイルをソースファイルの冒頭に取り込んでいます。この stdio.h ファイル内に printf() 関数を使うために必要なコードが含まれています。
文字列の末尾にある \n は改行を表しています。Visual C++ の「デバックなしで開始」から起動すると、プログラム終了時に「続行するには何かキーを押してください . . .」というテキストが追加されるので、プログラムから出力した結果のレイアウトのために使っているだけです。必要なければ省略してもかまいません。
printf() 関数を複数の行に分けて記述することもできます。出力したいデータが複数ある場合、データごとに printf() 関数で出力します。
printf("HELLO!!\n"); printf("Dazzling World\n");
上記の場合、2 つの文字列を順に出力することを表します。