関数の定義は、一般的には次の形式をしている。
戻り値の型 関数名(引数リスト) { 文; .... return 戻り値; }
基本的には main 関数と同じだ。戻り値がない場合は void を指定する。また、引数がない場合にも vold と書いておく。戻り値は return で返す。
main 関数と違うのは、関数プロトタイプの宣言が必要だということ。関数プロトタイプは次のような形式をしている。
戻り値の型 関数名(引数リスト);
これを実際に関数を定義する前に書いておく(普通はファイルのはじめのほう)。
#include void func1(void); // prototype of func1() int main(void) { printf("I like "); func1(); printf(".\n"); } void func1(void) { printf("C"); }
実行結果:
takatoh@nightschool $ ./sample_1_7 I like C.
ところで、関数プロトタイプを書かないとどうなるだろう。上のプログラムの関数プロトタイプをコメントアウトしてコンパイルしてみると:
takatoh@nightschool $ gcc sample_1_7a.c -o sample_1_7a sample_1_7a.c:13:6: warning: conflicting types for ‘func1’ [enabled by default] void func1(void) ^ sample_1_7a.c:9:5: note: previous implicit declaration of ‘func1’ was here func1(); ^
何やらよくわからないけど、エラーになるってことはわかった。