ディエナ さんが書きました:
どういうときに使ったりするんですか?
コード:
#include <stdio.h>
void func(void)
{
int i = 3;
printf(" i = %d\n", i);
}
int main(void)
{
int i = 5;
func();
printf("i = %d\n", i);
return 0;
}
このようなプログラムがあった時、
わざわざ関数を呼び出すことはないと考え、
呼び出し元に展開したとき、ブロックによる
「名前(識別子)のスコープ(有効範囲)の仕組み」がなければ、
変数名がぶつからないように変更が必要になります。
ディエナ さんが書きました:
あと、ブロックについての定義もそこまで教わってません。だれか詳しく回答お願いします。
ブロックとは複合文のことです。
C は 1999年版から規格が変わって、
それまでは、宣言を文の前に書かなければならなかったのが、
宣言と文をどういう順序で書いてもよくなりました。
C99より前
コード:
複合文:
{ 宣言の並び(省略可) 文の並び(省略可) }
宣言の並び:
宣言
宣言の並び 宣言
文の並び:
文
文の並び 文
C99以降
コード:
複合文:
{ ブロック項目の並び(省略可) }
ブロック項目の並び:
ブロック項目
ブロック項目の並び ブロック項目
ブロック項目:
宣言
文
C++ は、宣言が宣言文として文に含まれるので次のようになっています。
コード:
複合文:
{ 文の並び(省略可) }
文の並び:
文
文の並び 文