🌞自作関数9 自作関数の引数はvoid f(int x)のように記述します。void f(x)と記述してはいけませんの

ソーラー「例えば


void f(int x){

printf("%dをとりこみました。\n",x);

}


のように自作関数が定義されていて


main関数内で自作関数を使用するとき

f(1);

や

f(10);


のように


int xに数値を代入して 


プログラムを記述してきました   


このときの

数値1や数値10

は

自作関数fの引数(=関数が利用できるデータ)ですね。」



アレサ「先程のプログラム


👇


#include <stdio.h>


void f(int x){

printf("%dをとりこみました。\n",x);

}


int main(void){

int a=10;

f(a);

f(a);

f(a);


return 0;

}


コンパイル結果


10をとりこみました。

10をとりこみました。

10をとりこみました。


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


void f(int x){

printf("%dをとりこみました。\n",x);

}

のように


自作関数内で変数xを使用するため


自作関数の引数に


ローカル変数xの変数宣言int xを用い


変数xに与えられる数値データを


自作関数の引数として受け取れるようにしています。


ローカル変数ときけば


グローバル変数を思いつかれる方もおられるかもしれません。


自作関数の引数にはローカル変数だけでなく


グローバル変数を用いることもできるのかな?


とおもっちゃいます」



その際のプログラムを次のように表記してみます。


#include <stdio.h>

int x;

void f(x){

printf("%dをとりこみました。\n",x);

}

//👆グローバル変数の変数xを自作関数の引数に

//用いようとしています


int main(void){

int a=10;

f(a);

f(a);

f(a);


return 0;

}


コンパイル結果


(EAZY IDECの場合)

10をとりこみました。

10をとりこみました。

10をとりこみました。


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

エラー (アクティブ) E0757 変数 "x" は型の名前ではありません

エラー C2064 1 引数を取り込む関数には評価されません。

エラー C2064 1 引数を取り込む関数には評価されません。

エラー C2064 1 引数を取り込む関数には評価されません。

エラー C2448 'f': 関数の定義が間違っています。

エラー C2182 'f': 'void' 型が不適切に使用されています。





ソーラー「EAZYIDECの場合はコンパイルできていますが


Visual Studioではビルドエラーが出ています。


グローバル変数はプログラム全体で使える変数ですが


この記述方法だと自作関数が機能しないみたいですね。



では次に


プログラムの冒頭で


float x;


で定義されたグローバル変数xを


自作関数の引数とした


プログラムをコンパイルしてみます


#include <stdio.h>

float x;

void f(x){

printf("%fをとりこみました。\n",x);

}


int main(void){

float a=10.0;

f(a);

f(a);

f(a);


return 0;

}


コンパイル結果(EAZY IDECの場合)


0をとりこみました。

0をとりこみました。

0をとりこみました。


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


エラー (アクティブ) E0757 変数 "x" は型の名前ではありません

エラー C2064 1 引数を取り込む関数には評価されません。

エラー C2064 1 引数を取り込む関数には評価されません。

エラー C2064 1 引数を取り込む関数には評価されません。

エラー C2448 'f': 関数の定義が間違っています。

エラー C2182 'f': 'void' 型が不適切に使用されています。



ソーラー

「あれっ なんかコンパイル結果もおかしいな・・・」


アレサ「変数aに代入する数値を22.22222


にしても


コンパイル結果(EAZY IDECの場合)

0をとりこみました。

0をとりこみました。

0をとりこみました。

となります。」


ソーラー「あれ?


先のプログラム👇ではうまくいったんだけどなあ・・


#include <stdio.h>

int x;

void f(x){

printf("%dをとりこみました。\n",x);

}


int main(void){

int a=10;

f(a);

f(a);

f(a);


return 0;

}


コンパイル結果(EAZY IDECの場合)


10をとりこみました。

10をとりこみました。

10をとりこみました。」



アレサ


「ソーラーさん🌞


同じようなことが自作関数の引数に直接数値を代入した場合にも


起きています


グローバル変数int x;を使った先のプログラムで


自作関数f(x)の引数xに直接数値222を代入すると


#include <stdio.h>

int x;

void f(x){

printf("%dをとりこみました。\n",x);

}


int main(void){

f(222);

f(222);

f(222);


return 0;

}

コンパイル結果(EAZY IDECの場合)


222をとりこみました。

222をとりこみました。

222をとりこみました。


とうまくコンパイルできていますが


グローバル変数float x;を使った先のプログラムで


自作関数f(x)の引数xに直接数値2.22を代入しても


#include <stdio.h>

float x;

void f(x){

printf("%fをとりこみました。\n",x);

}


int main(void){

f(2.22);

f(2.22);

f(2.22);


return 0;

}

コンパイル結果(EAZY IDECの場合)


0.000000をとりこみました。

0.000000をとりこみました。

0.000000をとりこみました。


とうまく2.22を


printf出力表示できません



ソーラー


「自作関数の引数にint xでなくxを記述すると


おかしな結果がでてくるんだね。」




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

作者を応援しよう!

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

応援したユーザー

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