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언어
'개인공부 > C언어' 카테고리의 다른 글
C언어 - 블록 영역의 정적변수 (0) | 2020.11.13 |
---|---|
C언어 - 저장공간의 다섯가지 분류 , 자동변수, 레지스터 변수 (0) | 2020.11.13 |
C언어 - 객체(Object)와 식별자(Identifier) , L-value R-value (0) | 2020.11.12 |
C언어 - 메모리 레이아웃 훑어보기 (0) | 2020.11.12 |
C언어 - 메모리 레이아웃과 문자열 (Memory Layout ) (0) | 2020.11.12 |