🌞なぜ void newmadefunction(void){ printf("今日もよいC言語日和です。\n"); return ; } と自作関数が記述されるのでしょうか?(void)に注目

#include <stdio.h>


void newmadefunction(void){

printf("今日もよいC言語日和です。\n");

return ;

}


int main (void){


newmadefunction();


return 0;

}


コンパイル結果


今日もよいC言語日和です。


ソーラー「では なぜ


void newmadefunction(void){

printf("今日もよいC言語日和です。\n");

return ;

}


と自作関数が記述されるのか?


ですね


この仕組みをみていきましょうか


まず

void newmadefunction(void)


の(void)の部分ですね。


自作関数newmadefunctionの定義は


printf("今日もよいC言語日和です。\n");


となっていますが


このprintf文には


printf("%d個りんごがあります\n",a);


の変数aのように


数値入力される変数が存在していません。


自作関数の定義に


数値を格納する


変数がないときは(void)


または何も記述せず()


と記述する決まりとなっています。


ですので


#include <stdio.h>


void newmadefunction(){

printf("今日もよいC言語日和です。\n");

return ;

}


int main (void){


newmadefunction();


return 0;

}


コンパイル結果


今日もよいC言語日和です。


このプログラムの自作関数の定義では


数値を格納する


変数がないので


void newmadefunction(){

printf("今日もよいC言語日和です。\n");

return ;

}


void newmadefunction()


と記述されています。


printf("%d個りんごがあります\n",a);

のように自作関数の定義に変数a

が含まれている場合は


自作関数は


void newmadefunction(int a){

printf("%d個りんごがあります\n",a);

return ;

}


と記述します

(自作関数名は newmadefunction

である必要はなく自由につけることができます。)


つまり変数aが自作関数の定義に含まれている場合は


そのaの変数宣言が行われている必要があるのですが


そのaの変数宣言が


自作関数 newmadefunctionの引数の()内に


newmadefunction(int a)


と記述されるわけです



自作関数の定義に 


printf("%d個りんごがあります\n",a);


の変数aのように


数値入力される変数が存在していない場合



void newmadefunction(){

printf("今日もよいC言語日和です。\n");

return ;

}

👆このように自作関数を定義して


自作関数 newmadefunctionをmain関数内で呼び出して


使用するわけですが


そのときは


newmadefunction();


と記述します。


newmadefunction(void);


と記述してはいけません。


newmadefunction(void);


と記述すると


#include <stdio.h>


void newmadefunction(void){

printf("今日もよいC言語日和です。\n");

return ;

}


int main (void){


newmadefunction(void);


return 0;

}


コンパイル結果

EAZY IDECの場合


ファイル「C:/Users/solarplexuss/AppData/Local/EasyIDEC/project/default/main.c」の

「10行目」で記述エラーを発見しました。

「identifier」を付け忘れています。


Visual Studioの場合


ビルド結果(Visual studioの場合)


エラー C2144 構文エラー: 'void' は ';' によって先行されなければなりません。

エラー C2144 構文エラー: 'void' は ')' によって先行されなければなりません。

エラー C2059 構文エラー: ')'

エラー (アクティブ) E0254 型名は使用できません

警告 C4091 '': 変数が何も宣言されていないときは、'void' の左辺を無視します。


と表示され


コンパイルできません。


次に


自作関数の定義に 


printf("%d個りんごがあります\n",a);


の変数aのように


数値を格納する変数が存在している場合

👇

void newmadefunction(int a){

printf("%d個りんごがあります\n",a);

return ;

}


この自作関数 newmadefunctionをmain関数内で呼び出して


使用するわけですが


そのときは


newmadefunction(1);


のように記述して


プログラムを構成します。



#include <stdio.h>


void newmadefunction(int a){

printf("%d個のりんごがあります\n",a);

return ;

}


int main (void){


newmadefunction(1);


return 0;

}


コンパイル結果(Visual studioの場合も)

1個のりんごがあります


つまり


初期化されていない変数aに1を代入しているというわけです。


(int a=1;をおこなっているわけです。)



1が変数aに代入されると


aの値は1になることにより


printf("%d個のりんごがあります\n",a);


が実行されると


コマンドプロンプト画面に


1個のりんごがあります


が表示されます。



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

作者を応援しよう!

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

応援したユーザー

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