프로그래밍/C

4.8 블록 구조(Block Structure)

피노리코 2014. 11. 2. 04:01

C의 함수들이 다른 함수 내부에서 정의될수 없다 그러나 변수들이 함수 내에서 블록구조 형식으로 정의될수 있다. 변수의 선언(초기값 결정도 포함한)은 함수의 시작을 나타내는 왼쪽 중괄호 { 뿐만 아니라 복합문의 시작을 나타내는 왼쪽 중괄호 { 뒤에도 따라 올수가 있다

이렇게 선언된 변수들은 다른 블록에서 동일한 이름으로 선언된 변수를 숨길 수 있으며, 오른쪽 중괄호 } 를 만날 떄 까지 유효하다. 예를 들면


if(n>0) {

    int i; /* declare a new i */

    

    for(   i=0;i<n;i++)

        ...

}


변수 i의 범위는 if 의 내부이며 블로외부의 i 변수와는 아무런 연관이 없다. 자동변수의 선언과 초기화는 블록 안으로 들어갈 때마다 매번 일어나지만,정적 변수는 블록 안으로 처음 들어갈떄 한번 초기화 되는점을 주의하기 바란다

매개변수 및 자동 변수는 같은 이름의 외부형 변수나 함수와는 전혀 별개의 것이다.


int x;

int y;


f(double x)

{

    double y;

    ...

}


위와 같은 선언에서 함수 f내에서의 x변수는 double로 동작하며 함수 f밖에서의 x변수는 외부형 정수로 서로 별개의 것이다. 이와 같은 관계는 변수 y에 대해서도 마찬가지이다 그러나 에러를 발생시킬 확률이나 혼동을 일으킬 확률이 매우 크므로 이러한 변수의 사용은 바람직 하지 못하다