C11におけるユーザー定義関数について。
//関数の部分
double fd1(double a, double b) {
double c = (a + b) / 2.0;
return c;
}
//メインの部分
void main() {
double d1, d2, d3, d4[10];
double a = 1.2, b = 3.4, c = 2.7;
int d = 0;
d1 = fd1(a, b);
d2 = fd1(5.4, 8.3);
d3 = fd1(c, 9.2);
d4[0] = d1;
d4[1] = d2;
d4[2] = d3;
for (d; d < 3; d++) {
printf("d%d = %f\n", d, d4[d]);
}
}
ユーザー定義関数とは、自分で好き勝手に処理の内容を定義できる関数のことです。
どのようなプログラミング言語であろうとも、関数(ファンクション)は主に2つの種類に分類されます。
①組み込み関数(built in function)
printf関数のように最初からC言語さんのほうで用意してくれている関数のことを、組み込み関数、またはbuilt in functionなどと呼びます。
②ユーザー定義関数
上記プログラムのfd1のように、各プログラマーさんが好き勝手に関数名とその関数を実行したときの処理を定義できる関数のことを、ユーザー定義関数と呼びます。
C言語のユーザー定義関数は、PHPやPythonなどと違って、関数宣言のための文が存在していないんですね。
あとC言語の場合は、関数宣言はmain関数の外に記述するんですね。
これはなかなかおもしろい仕様だなと思います。
関数宣言のときのパレンティス(丸括弧)内には、整数などを直接的に引数として記述することはできません。
このパレンティス内はあくまでも関数実行時のパラメータを受け取るための引数の箱を記述するための場所です。
あと、関数には引数とか返り値が必要ですが、必須なのはあくまでも返り値だけです。
関数名の右辺のパレンティス内を空の状態で関数を定義することは、それをやる意味があるのかどうかは置いておいてC言語のルール的には問題なく可能です。
宣言したユーザー定義関数を実行するには、関数名(パラメータ1, パラメータ2,...)という感じで記述してやればOKです。
もちろんこのとき、返り値を受け取るための変数などの用意は必要です。
関数に引数を指定していない場合は、関数実行時のパレンティス内は空のままでOKです。
以上です。