【C言語】ユーザー定義関数の注意点(プロトタイプ宣言)
C言語でユーザー定義関数(自分で作る関数)を使う時には1つ注意点があります。
それは、ユーザー定義関数は呼び出される前に定義する必要があることです。
この順番が逆になっているとコンパイルエラーが起こります。
エラーとなるケース / エラーにならないケースをそれぞれ紹介するので学んでみてください。
コンパイルエラーとなるケース
#include <stdio.h>
int main(void) {
printHello();
}
/* ユーザー定義関数を後に定義 */
void printHello(void) {
printf("HelloWorld");
}
このプログラムではmain関数がprintHello関数を呼び出しています。
しかし、呼び出したタイミングではまだprintHello関数が定義されていない(printHello関数が下にある)ため、コンパイルエラーとなります。
コンパイルエラーとならないケース
コンパイルエラーを避けるには次の2つの方法があります。
基本的には、2個目のプロトタイプ宣言を使いましょう。
1. ユーザー定義関数を呼び出される前に定義する
#include <stdio.h>
/* ユーザー定義関数を先に定義 */
void printHello(void) {
printf("HelloWorld");
}
int main(void) {
printHello();
}
1つはユーザー定義関数を呼ばれるより先に書くことです。
上のプログラムではmain関数がprintHello関数を呼び出しています。
printHello関数の方が先に書かれているのでコンパイルエラーとなりません。
2. プロトタイプ宣言
#include <stdio.h>
// プロトタイプ宣言
void printHello(void);
int main(void) {
printHello();
}
void printHello(void) {
printf("HelloWorld");
}
プロトタイプ宣言は、最初にユーザー定義関数の概要を記載する方法です。
上のサンプルコードのように、関数の返り値の型と引数の型を宣言します。
こうするとユーザー定義関数の順番に関係なく、コンパイルエラーが避けられます。
関数の多いプログラムでは、必ずプロトタイプ宣言を行いましょう。
使用関数が一覧できるという、副次的なメリットもあります。
C言語を学ぶなら苦C
C言語を初めて学ぶなら苦しんで覚えるC言語がおすすめです。
分かりづらいC言語を基礎からきっちりと理解することができます。