🌞自作関数5 自作関数のプロトタイプ宣言をおこなってから自作関数の定義を行ってみます 

ソーラー

「さあ、次のプログラムを元気🌞にみていこう。


#include <stdio.h>


void f(int a);


int main(void){

f(8);

return 0;

}


void f(int a){

printf("%d回目のご飯はNouvel de まぐろです\n",a);

}


コンパイル結果

8回目のご飯はNouvel de まぐろです



今まで見てきた自作関数はint main(void){}の前に


自作関数の定義がかかれていたけれども


このプログラムのような


自作関数の定義の記述の仕方もあります


この自作関数の定義の記述の仕方は


まず


int main(void){}の前に


さきに


自作関数の定義


void f(int a){

printf("%d回目のご飯はNouvel de まぐろです\n",a);

}

の


void f(int a);


だけを 記述しておきます。


そして


int main(void){}の後に


自作関数の定義


void f(int a){

printf("%d回目のご飯はNouvel de まぐろです\n",a);

}


を記述します。


このように

int main(void){}のまえに


void f(int a);を記述することを


プロトタイプ宣言といいます。



自作関数の定義


void f(int a){

printf("%d回目のご飯はNouvel de まぐろです\n",a);

}

の仕組みをもう1度考察してみようかな。



void f(int a)のように


自作関数fの先頭に


自作関数fに戻り値を返す時の


戻り値を格納する型を記述するのが


自作関数を作るときのルールとなっています。


(この場合は戻り値を格納させないのでvoidを記述しています)


戻り値を格納する型の右隣は 関数名を記述します。


(この場合は 関数名はfとなっていますが

f でなくても自作関数の名前は自由につけることができます )


関数名のお隣のかっこ()内には


自作関数内で使用される変数の変数宣言を記述します。


この場合は


整数値を格納する


変数aが


自作関数内で使用されています。


ですので


aの変数宣言


int aを


関数名fのお隣のかっこ()内に


記述します。


あとは


void f(int a){

printf("%d回目のご飯はNouvel de まぐろです\n",a);

}

のように


void f(int a){}の{}内に


自作関数にしたい命令文



printf("%d回目のご飯はNouvel de まぐろです\n",a);



を記述して


自作関数fの完成です


自作関数の定義の仕方はこんなのだったよね。。




おおっと


そうそう


今のお話は


int main(void){}のまえに


void f(int a);


を記述して


プロトタイプ宣言をおこなったあと


int main(void){}の後ろに


自作関数の定義

void f(int a){

printf("%d回目のご飯はNouvel de まぐろです\n",a);

}

を記述するというものだったね。



では


今までのように


int main(void){}の前に


自作関数の定義を


記述するタイプと


int main(void){}の後ろに


自作関数の定義を記述するタイプ 


を見比べてみましょう。


自作関数の定義をint main(void){}の前に記述するタイプはどうだったかというと

👇

#include <stdio.h>


void f(int a){

printf("%d回目のご飯はNouvel de まぐろです\n",a);

}


int main(void){

f(8);

return 0;

}


コンパイル結果

8回目のご飯はNouvel de まぐろです


となっています。


void f(int a); プロトタイプ宣言が


int main(void){}の前につくかつかないか


自作関数の定義が


int main(void){}の後につくかつかないか


の


違いでmain関数内は全く同じプログラムですね。


自作関数の定義をint main(void){}の前に記述しても


自作関数の定義をint main(void){}の後ろに記述しても


自作関数をmain関数内で呼び出して使用するときは


f(8);


で一緒だね。ア~レ~サ~。」


アレサ「そうですね。」


ソーラー 「ではもうひとつ


自作関数のプロトタイプ宣言をしている


プログラムをみていきましょう。


#include <stdio.h>


void f(void);


int main(void){

f();

return 0;

}


void f(void){

printf("ご飯はNouvel de まぐろです\n");

}


コンパイル結果

ご飯はNouvel de まぐろです


このプログラムの場合でも


自作関数のプロトタイプ宣言は


void f(void);


で


自作関数fの定義


void f(void){

printf("ご飯はNouvel de まぐろです\n");

}


のvoid f(void)の部分が用いられています。



自作関数fの定義は


int main(void){

f();

return 0;

}

の後に


void f(void){

printf("ご飯はNouvel de まぐろです\n");

}


と記述されることになるね。


自作関数fには引数に変数を使用していないので


プロトタイプ宣言


void f(void);


のf()の中にはvoidが記述されます。


そして


変数を使用していない自作関数を


main関数内でよびだして使用するときは


voidを省いた


f();と記述します。


f(void);


と記述するとコンパイルエラーになります。」



アレサ 「あっそうですね。


自作関数の定義内の


printf("ご飯はNouvel de まぐろです\n");には


引数として数値を受け取る変数がつかわれていないですね。」


ソーラー

「そうなんです。


数値を受け取る変数を()の中に引数としてもっていないんです。


つまり


自作関数fは数値を受け取ったりすることはないというわけで


自作関数fの定義では


void f(void)と()の中がvoid(数値を受け取らない、数値を格納しない型)


になるのでしたね。


このタイプの自作関数をmain関数内でよびだして使用するときは


f(void);でなくf();と記述する・・・ 


ここがポイントかな?


それにしてもラッキー


新しい自作関数の定義置き場 み~つけたっと


メイン関数 int main (void){}の外側の領域は


まるで自作関数置き場みたいだね。


int main (void){}の前も


int main (void){}の後も


自作関数置き場ってわけか


とにかく


これで大量に自作関数がおけるぞぉぉ」


大規模自作関数プランテーション構想に想いを馳せる。


アレサ 「ソーラーさん 


そうですね


また いろいろな お料理表示自作関数をつくって設置できますね。」

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます