auの日記

プログラミング初心者の日記。(auはハンドルネームです)

C言語の関数のプロトタイプ宣言

auです。
前回のスコープの記事の中で使ったプロトタイプ宣言について書きたいと思います。
↓前回の記事
program-shoshinsya.hatenablog.com

関数のプロトタイプ宣言とは

プロトタイプ宣言の前に、関数を呼び出すにはルールで呼び出す前に記述しておかなければならないというものがあります。
プログラミングは、どこからどの関数を書き始めてもいいのですが、使いたい関数がそれより下に書いてある場合、呼び出してもエラーがでてしまいます。
また、プロトタイプ宣言がなくてもコンパイルがうまくいく場合もありますが、それはたまたま戻り値がintであったりという場合もあるそうなので、プロトタイプ宣言はやっていったほうがいいと思います。
プロトタイプ宣言がない場合でhello関数を呼ぶプログラムを書いてみます。

#include<stdio.h>

int main(void) {
    hello(); // hello関数の呼び出し
    return 0;
}

void hello(void) {
    printf("hello\n");
}

//実行結果
prototype.c: In function ‘main’:
prototype.c:4:5: warning: implicit declaration of function ‘hello’ [-Wimplicit-function-declaration]
     hello(); // hello関数の呼び出し
     ^
prototype.c: At top level:
prototype.c:8:6: warning: conflicting types for ‘hello’
 void hello(void) {
      ^
prototype.c:4:5: note: previous implicit declaration of ‘hello’ was here
     hello(); // hello関数の呼び出し
     ^

エラーが起きてしまいました。
次はプロトタイプ宣言をして実行してみたいと思います。

#include<stdio.h>

void hello(void) {
    printf("hello\n");
}

int main(void) {
    hello(); // hello関数の呼び出し
    return 0;
}

// 実行結果
hello

今回はちゃんと実行できました。
数字を呼び出す関数の場合は"void"ではなく、"int"や"float"を宣言してください。自分が呼び出したい型に応じて変更してくださいね。