C언어 - 변수의 영역과 연결 상태, 객체의 지속 기간

2020. 11. 13. 10:22개인공부/C언어

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*
*	Variable scopes (Visibility)
*	- block, function, function prototype, file.
*
*	function prototype은 프로토타입 선언동안.
*
*	function scope( function() 가 block scope{} 처럼 보이기도 한다.
*
* file 영역은 함수영역 바깥에 선언되면 된다.
*/

int g_i = 123;	//global variable 전역변수
int g_j;		// global variable 전역변수

void func1() {
	g_i++;
}

void func2() {
	g_i += 2;
}

int el;	//	file scope with external linkage (global variable)
// 마치 프로그램 전체에서 쓸수있는 변수처럼 쓰인다.

static int il;	// file scope with internal linkage, static으로 다른데서 쓸수 없게 막아놓음

void testLinkage();

int main() {

	g_i += 2; // uses g_i

	int local = 1234;
	func1();
	func2();

	

	printf("%d\n", g_i); // uses g_i 
	printf("%d\n", g_j); // Not initailized?
	// bss segment에 초기화 되지 않은 변수들을 0으로 초기화 시킨다.
	printf("%d\n", local);


	el = 1024;
	testLinkage();
	printf("%d\n", el);

	return 0;
}

// linkage 는 여러 파일에서 작동한다.
// 두개의 c파일 

 

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*
	Storage duration:
	-static storage duration : 시작할때부터 프로그램 끝날때까지 메모리 가짐.
	(Note : 'static' keyword indicates the linkage type, not the storage duration
	// 여기서의 static은 현재 범위가 더 넓어지지 않기 위해 막는다. 기간과는 상관없음

	- automatic storage duration
	스택에서 스코프에 따라서 변수명과 연결이 되어있는 메모리

	-allocated storage duration
	동적할당과 연관됨

	-thread storage duration
	멀티쓰레딩 개념
*/

void count() {
	int ct = 0; // 지역변수 현재 자리하고 있는 블럭에서 벗어나면 사라짐.
	printf();
	ct++;
}

void static_count() {
	static int ct = 0; // 프로그램이 끝날때 사라짐
	printf("static count= %d\n", ct);
	ct++;
}

 

 

출처 : 홍정모의 따라배우는 C언어