본문 바로가기

개발공부/C

자동변수

#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);
}
    

'개발공부 > C' 카테고리의 다른 글

컴파일과 CMake  (0) 2019.10.25
변수의 영역  (0) 2019.10.17
C언어를 가장 쉽고 직관적으로 이해하는 강의  (0) 2019.10.17
배열을 함수에게 전달해주는 방법  (0) 2019.10.17
printf()함수  (0) 2019.10.15