Helloプログラムの説明
次に、helloプログラムを下の様に書き換えます。
#include <stdio.h> //表示用の関数printの定義 void print() { printf("hello!"); } //メイン関数 //実行は必ずここから始まる。 int main() { print(); //print関数をここで使う。 getc(stdin);//Enterキーが押されるまで待つ return 0;//処理の終わり } |
上のプログラムは、純粋なCプログラムです。ただし、C++はCを包含していますのでCプログラムはC++プログラムでもあります。この実習では、C++のプログラムを対象にしますので、今後の説明ではCとC++の違いについては触れません。
コメント
プログラム中の
//表示用の関数printの定義
のような、//で始まる文はコメントと呼ばれ、人がプログラムに注釈を入れるために使われます。
//以降の改行までがコメントになります。
コメントは、無視されるので、あっても無くてもプログラムの動作には影響を与えません。
しかし、自分で作ったプログラムには、他の人が見ても分かるようにコメントを入れる習慣を付けましょう。
上のプログラムにはありませんが/*コメント*/という形式もあります。 この形式は、/*から*/までがコメントになります。
int main(int argc /*引数の数*/, char* argv[]/*引数の配列*/)
のように使います。また、//は一行のコメントにしか使えませんが、/**/は複数行のコメントに使えます。
たとえば、
/*
コメント1
コメント2
*/
のように使えます。
文の終わりは;(セミコロン)
プログラムを見ると;がいくつかあります。文の終わりには;を入れます。ただし、例外もありますので、以後出てくる例題を見ながら感覚をつかんで下さい。
すべての入力は、半角英数字で
コメントと文字列以外はすべて半角英数字です。直接入力で文字を打ってください。
文字列は""で囲まれた部分です。
printf("hello!");の"hello!"が文字列と呼ばれます。""の間は漢字も記述できるので、
printf("今日は!");と書くことも出来ます。
関数
C,C++では、プログラムの色々な機能一つ一つを関数(function)と呼ばれるもので定義します。例えば上のプログラムでは、hello!という文字を表示するためにprint(printfとは別物)という名前の関数を定義しています。
日本語では、関数ですが英語ではfunctionです。数学の関数をイメージするよりも、機能とイメージしてください。functionを辞書で引いてみましょう。
printという名前の関数の定義は、
void print()
{
printf("hello!");
}
の部分です。このように、関数の内容を記述することを関数を定義するといいます。詳しい説明は、後にします。 詳細は、ここやここを参照してください。
すべての始まりmain関数
main関数は特別な関数で、必ずmain関数の先頭の行からプログラムの実行が始まります。main関数をプログラムの最初に書いても、後の方に書いてもこのことは変わりません。
int main()
{
print(); //この行が始まり
getc(stdin);//Enterキーが押されるまで待つ
return 0;//処理の終わり
}
このmain関数の定義では、最初に上で説明したprint関数を使いhello!を表示します。次にgetc関数を使いキーボードのキーが押されるのを待ちます。最後にreturn 0で、実行元に整数の0を返して、プログラムを終了します。実行元とはプログラムを起動したプログラムです。皆さんはVSを使っているときは、VSが実行元です。0は正常終了を表します。それ以外の数字を返すケースは、かなり上級のレベルにならないとありません。
main関数のさらに詳しい説明は後から説明します。
ランタイムルーチン(あらかじめ用意されている関数)
文字を表示したり、キーを入力したりする関数はあらかじめ用意されています。これらの関数をランタイムルーチンと呼びます。また、ランタイムルーチンをカテゴリごとにまとめたものをランタイムライブラリと呼びます。
ここでは、ルーチンとはファンクション(関数)と同じ意味だと考えてください。
上のプログラムでは4つの関数名が現れています。これらは、
ランタイムルーチン | ユーザ定義関数 |
printf, getc | main, print |
のように分類することが出来ます。ランタイムルーチンに対して、自分で記述した関数をユーザ定義関数と呼びます。
ランタイムルーチンを使うためには、プログラムの先頭の
#include <stdio.h>
のように、使いたいランタイムルーチンが含まれるランタイムライブラリをインクルードする必要があります。今回はたまたま、printfもgetcもstdio.hに含まれていました。stdio.hは普通のテキストファイルに過ぎません。VSからプログラム中のstdio.hにマウスを置き、右クリックしてメニューを出し、そのメニューからstdio.hを開いてみることが出来ます。ぜひ一度見ておいてください。
stdioは、standard input out=標準入出力の短縮形です。
このように関数を定義した、拡張子がhまたはhppのファイルをヘッダーファイルといいます。ヘッダーファイルは自分で作ることも出来ます。
printfは、文字を表示する関数ですが色々な機能があります。ここでは、最低限の説明にとどめます。詳しいことは各自helpで調べてみてください。
printf("hello!");の"hello!"の部分をprintfに与える引数(argument)と呼びます。関数は与えられた引数によって異なる動作をします。printfの場合は表示する内容が変わります。
printf("hello!\nhello!");と書くと
hello!
hello!
のように表示されます。hello!とhello!の間の\nは改行を表します。\nのように\マークで始まる記号をエスケープシーケンスと呼びます。
他のエスケープシーケンスには、
\t タブ
\\ \
\" "
\' '
などがあります。
直接記述できないような文字をエスケープシーケンスで表現しているのです。
\マークはエスケープシーケンスの記号なので、\マークを表示したい場合は\\とします。
getcの簡単な説明
getcは、文字を一文字入力する関数です。
引数の、stdinは標準入力(standard input)と呼ばれ、通常はキーボードからの入力を表します。
このプログラムでは、何もしないとすぐにウインドウが閉じてしまうので、それを防ぐためにgetcを使っています。