まず、関数へのインプットについて考えてみましょう。
ここでは、『関数へのインプット』を以下のように定義付けます。
| 関数へのインプット | 関数の処理結果に影響を与えるもの |
|---|
関数へのインプットは以下のとおりとなります。
関数へのインプット
- 関数の引数
- グローバル変数
- 呼び出し関数の復帰値
- 呼び出し関数の引数(ポインタ変数の実体のみ)

関数へのインプットとして、一番に思いつくのは関数の引数だと思います。
一般的に関数の引数は、関数の処理結果をダイレクトに決定付ける値を渡すために設計されます。
他には何があるでしょうか?
以下の関数を見て考えてみましょう。
long g_flag;
void sample(long arg)
{
long ret;
if (g_flag == 1) {
ret = func1(arg);
if (ret > 0) {
g_flag = ret;
} else {
g_flag = -1;
}
}
}
グローバル変数と呼び出し関数の復帰値も、関数の処理結果を決定付ける要因となります。
他にはないでしょうか?
long sample(long arg)
{
long ret = 0;
long data;
get_data(&data);
switch (data) {
case 0:
ret = 1;
break;
case 1:
ret = 2;
break;
case 2:
ret = 5;
break;
default:
break;
}
return ret;
}
実は、呼び出し関数の引数の型がポインタ変数だった場合、呼び出し関数の引数の実体も関数の処理結果を決定付ける要因となります。


