#include <stdio.h>
int i;
int main()
{
        int i = 100;
        i++;
        {
                int i = 1000;
                i++;
                {
                        int i = 10000;
                        i--;
                        add1();
                        add2();
                        printf("in block 2 : i = %dn", i);
                }
                add1();
                add2();
                printf("in block 1 : i = %dn", i);
        }
        add1();
        add2();
        printf("in main() : i = %dn", i);
        return 0;
}

add1(void)
{
        static int i = 20000;
        printf("in add1() : i = %dn", i++);
        return 0;
}

add2(void)
{
        printf("in add2() : i = %dn", i++);
        return 0;
}





이걸 보시면... add1() 이랑 add2()는 main함수 아래에 정의되어 있고, 원형을 선언하지도 않았는데 제대로 컴파일이 되는 이유가 뭔가요?

그리고 add2 가 0, 1, 2 로 출력되는 이유는 뭔지요?... add2 안에는 변수 i를 선언하지도 않았는데 printf 에서 i를 출력하면 0부터 출력이 되는...

아아.... 점점 배우면 배울수록 뭐가 뭔지 복잡해지는군요...;;;