はじめての C

[Learning GNU C]

2.4. 自分だけの 関数を つくろう

前の 例題では 関数を 1つだけ 定義した。 別の 関数を 加えるには 通常 2つのことが 必要だ。 1つ目は ちょうど main() を 定義したように その関数を 定義 define しないと いけない。 また それを 宣言 declare しなければ ならない。 関数の 宣言とは その要求を GCC に 伝えるように することだ。 main() については それが 特別な 関数であり GCC が 要求を 理解しているという 理由から 宣言する 必要は ない。 関数に 与える 名前 あるいは 識別子 identifier は 定義と 宣言の 両方に 現われないと いけない。

関数の 識別子には アルファベットの 'a' から 'z' と 'A' から 'Z'、数字の '0' から '9' まで、それにアンダースコア '_' を 使うことが できる。 これらは 識別子の 最初の 文字が 数字で なければ どんな 順序でも 用いることが できる。 以前 いったように C は 大文字と 小文字を 区別する case-sensitive ので "My_Function" と "my_function" は 全く 異なるものだ。 関数の 識別子は 固有のもので なければならない。 識別子は 短いほうは 文字 1つから 68文字の 長さまでが 安全な (範囲) だ。

識別子と ともに それぞれの 関数へは 型 type と code の block を 渡さなければ ならない。 型は compiler に どんな 種類の data を 返すのかを 伝える。 関数の 返り値は 無視することが できる。 printf() では どれだけの 文字数が terminal に 表示されるか その整数値を 返す。 この情報は 重要で ないので われわれの プログラムでは 無視された。 次の章では data の 型を 詳しく 検討しよう。 それまでは 返り値を 適当に 扱う gloss over ことに しよう。

これが 3つの 関数を 定義する プログラムだ。

Example 2-3. three_function.c

#include <stdio.h>

/* 関数の 宣言 */
int first_function(void);
int goodbye(void);

int
main() // 関数の 定義
{
printf("the program begins ...\n");
first_function();
goodbye();

return 0;
}

int
first_function() // 関数の 定義
{
/* この関数は なにも しない */
return 0;
}

int
goodbye() // 関数の 定義
{
printf("... and the program ends.\n");
return 0;
}

上の 例題では なにも 行なわない first_function() と message を 表示する goodbye() を 書いた。 関数では それぞれが 呼び出される 前に 宣言されないと いけない。 この場合 それは main() の 定義 (より前に?) 現われる 必要が あることを 意味する。 実際 関数の 宣言は 通常 #include の line の 後、どの 関数の 定義よりも 前に file の 先頭部分へ 集められている。