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


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


この自作関数の()内で変数宣言された変数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){}型の自作関数はブロック内で


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


変数xのスコープは


void f(int x){👉

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

👈}


👉👈内なんだろう😊」


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


ですので


命令文

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


をmain関数内に追加した次のプログラム


#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 が定義されていません


とコンパイルエラーが表示されます。


つまり


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


void f(int x){👉

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

👈}


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


ですので


main関数内の


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



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


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


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


をコンパイルすると


このxが定義されていないというコンパイルエラー表示が


でてくることになります。



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

作者を応援しよう!

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

応援したユーザー

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