#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부터 출력이 되는...
아아.... 점점 배우면 배울수록 뭐가 뭔지 복잡해지는군요...;;;
변수에는 전역변수와 지역변수가 있는데.. 전역변수로 잡을경우 모든 함수내에서 작동을 하게 되지..
물론 전역변수와 지역변수가 충돌을 할 경우 지역변수는 일시적으로 무시가 됨! 그리고 i 에는 초기화값이 없으니.. 잘못하면 이상한 값이 들어갈 수 있다는것! 주의하시길~ 그리고 원형을 선언하지 않을경우 void형으로 들어가게 될꺼야 아마.. main()앞에 아무것도 안붙이면 void형처럼 되는것과 같이!