#include <stdio.j>
/*
automatic storage class
- automatic storage duration, block scope, no linkage
- any variable declared in a block or function header
*/
void func(int k);
int main()
{
int i = 1;
int j = 2;
{
int i = 3; //name hiding
//블록 밖에서 선언된 i는 가려지고 3으로 초기화된 변수만을 이야기하게된다.
//스택안에 두개의 i가 쌓여있고 '맨 위에것만 보이고 아래에 있는 건 가려진다.'
printf("i %lld\n", (long long)&i);
int ii = 123;
//j is visible here
//j는 가려지지않는다. 스택안에 쌓여있다.
printf("j = %d\n", j);
}
//ii is not visible here
//블록을 나오면서 스택(메모리)에서는 i와 ii는 사라진다.(pop)
//이제 i는 하나만 남아있어서 가려진 것이 보인다.
printf("i %lld\n", (long long)&i); //which i?
for(int m = 1; m < 2; m++)
{
printf("m %lld\n", (long long)&m); //no block?
}
func(5); //cannot see any of the variabled defined so far.
for(int m = 3; m < 4; m++)
{
printf("m %lld\n", (long long)&m); //block?
}
return 0;
}
//여기서 부터는 '스택프레임'부터가 달라진다.
void func(int k)
{
int i = k * 2;
//do something with i and k
printf("i %lld\n", (long long)&i);
}