if文のスコープと使わない変数宣言
- コンパイルできるコード
#include <stdio.h> int main() { int i = 4444; printf("i: %d\n", i); if ( 1 ) { int j = 8888; printf("i: %d\nj: %d\n", i, j); } //printf("i: %d\nj: %d\n", i, j); return 0; }
- コンパイルできないコード その1
#include <stdio.h> int main() { int i = 4444; printf("i: %d\n", i); if ( 1 ) { int j = 8888; printf("i: %d\nj: %d\n", i, j); } printf("i: %d\nj: %d\n", i, j); return 0; }
- コンパイルできないコード その2
#include <stdio.h> int main() { int i = 4444; printf("i: %d\n", i); if ( 1 ) //{ int j = 8888; //printf("i: %d\nj: %d\n", i, j); //} //printf("i: %d\nj: %d\n", i, j); return 0; }
- 結論
・if文の中は {} の有無に関係なくスコープが発生する
・if文の中で {} の有無に関係なく,if文の中で使用しない変数の宣言を行うとエラーになる
(if文の中で宣言された変数は,if文の外で使用できないことは上記から分かる)