自分で作った関数の存在を他の関数やファイルに教えるためには、関数のプロトタイプ宣言を記述します。
関数は基本的に自分以外の関数の存在を知りませんが、あらかじめプロトタイプ宣言をしておくと、他の関数の存在を知ることができ、自分の関数の中から他の関数を使うことができるようになります。
関数のプロトタイプ宣言は、その関数を使いたい場所より前に書く必要がありますが、その書き方は非常に簡単です。関数の定義からブロックを省略するだけで済みます。
たとえば次のような関数があったとき…
int someFunction(int arg1, char *arg2) { int result = arg1 + atoi(arg2); return result; }
プロトタイプ宣言は次のようになります。
int someFunction(int arg1, char *arg2);
実際に main() 関数などから、この someFunction() 関数を使いたい場合は次のように書きます。
// まずプロトタイプ宣言を書く int someFunction(int arg1, char *arg2); // someFunction() を使う main() 関数を書く int main(int argc, char *argv[]) { int arg1 = 10; char *arg2 = "30"; return someFunction(arg1, arg2); } // someFunction() 関数の本体を書く // 必ずしもここに書く必要はなく、別のファイルでも問題なし // ただし、その場合でもプロトタイプ宣言は必要になる int someFunction(int arg1, char *arg2) { int result = arg1 + atoi(arg2); return result; }
プロトタイプ宣言はヘッダファイルの中に書くのが一般的です。 #include を使うことで大量の関数のプロトタイプ宣言を一気にインポートできるからです。一番わかりやすい例が windows.h です。 Windows のプログラムを開発する場合には必ず #include
ちなみに、関数を使う前に関数の定義が来ている場合はプロトタイプ宣言が不要です。たとえば次のコードは問題なく動作します。
// someFunction() 関数の定義を前もって書いておき、 // プロトタイプ宣言は書かない int someFunction(int arg1, char *arg2) { int result = arg1 + atoi(arg2); return result; } // someFunction() にはプロトタイプ宣言がないが、 // すでに上で定義済みなので問題なく使うことができる int main(int argc, char *argv[]) { int arg1 = 10; char *arg2 = "30"; return someFunction(arg1, arg2); }
Contributions