void f(int x)型の自作関数fの()内で変数宣言された変数xのスコープも自作関数fの定義のブロック{}内となります



void f(int x)型の自作関数fの()内で変数宣言された変数xのスコープも


自作関数fの定義のブロック{}内となります


(ようは変数xの使用可能範囲は自作関数fの定義のブロック{}内となります)




さあvoid f(int x)型の自作関数があらわれました。


この自作関数fの()内で変数宣言された変数xのスコープ(変数宣言された変数xの使用可能範囲)は


どうなっているのでしょうか?



#include <stdio.h>


void f(int x){

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

}


int main(void){

f(1);

f(1);

f(1);

return 0;

}


プログラムの実行結果


1をとりこみました。

1をとりこみました。

1をとりこみました。



マックス「void f(int x){}型の自作関数fは自作関数fの定義のブロック{}内で


変数宣言int xがおこなわれていないが


変数xのスコープは


void f(int x){👉

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

👈}


👉👈内なんだろう😊」


アレサ「そのとおりなんです。


ですので


今のプログラム内の


main関数内に



命令文

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



追加した次のプログラム


#include <stdio.h>


void f(int x){

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

}


int main(void){

f(1);

f(1);

f(1);

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

/*👆ここに変数xを含んだ命令文を追加しました*/



return 0;

}


を実行しても


(Visual Studioの場合)

識別子 "x" が定義されていません

(EAZY IDECの場合)

x が定義されていません


とエラーが表示されます。


つまり


自作関数fの()内でxの変数宣言が行われると


void f(int x){👉

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

👈}


👉👈で示す範囲が変数xのスコープとなります。


ですので


main関数内の


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



printf関数の第2引数であるxは


変数xのスコープの外で使用されていることになり


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


を実行しようとすると


このxが定義されていないというエラーが表示されることになります



main関数のブロック{}内で変数xを使用するには


やはり


main関数のブロック{}内でxの変数宣言を実行する必要があります」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る