티스토리 뷰
Static
전역 변수에 static이 붙으면 해당 파일에서만 사용하는 변수임을 명시적으로 나타낸다.
// main.c
static int x = 1;
int main() {
return 0;
}
// sub.c
static int x = 2;
지역 변수에 static이 붙으면 stack 영역에 생기는 게 아니라 data 영역에 생긴다. 데이터가 유지된다는 뜻이다.
int foo() {
static int x = 1;
x++;
print(x);
}
int bar() {
static int x = 2;
x++;
print(x);
}
- 두 static x 변수는 data 영역에 저장되지만, 여전히 block 안에서만 접근이 가능하다. 그렇기 때문에 static끼리 이름이 같아도 된다.
- foo()를 1번 실행하면 2, 2번 실행하면 3, 3번 실행하면 4가 된다. static 변수이기 때문에 함수가 끝나도 변수 값은 보존된다.
Extern
extern 키워드는 modular programming에 필요하다. 다른 파일에 변수나 함수가 존재한다는 것을 의미한다.
#include <stdio.h>
extern int x; // int x는 다른 헤더 파일 등에 저장되어 있는 값이고, 나중에 linking 할 것임을 의미한다.
int main() {
print(x); // 그래서 컴파일 에러가 나지 않는다.
return 0;
}
Example : 출력 값을 차례로 써라
#include <stdio.h>
extern int x; // int x = 1이 다른 파일에 명시되어 있다.
void useLocal() {
int x = 25;
print(x);
x++;
print(x);
}
void useStaticLocal() {
static int x = 50;
print(x);
x++;
print(x);
}
void useGlobal() {
print(x);
x *= 10;
print(x);
}
int main() {
int x = 5;
print(x);
{
int x = 7;
print(x);
}
print(x);
useLocal();
useStaticLocal();
useGlobal();
useLocal();
useStaticLocal();
useGlobal();
print(x);
return 0;
}
5
7
5
25
26
50
51
1
10
25
26
51
52
10
100
5
'공부' 카테고리의 다른 글
오픈소스 SW - License (0) | 2022.10.22 |
---|---|
시스템 프로그래밍 - 수 표현법 (0) | 2022.10.20 |
시스템 프로그래밍 - GCC & GDB 주요 정리 (0) | 2022.10.20 |
Unix programming - 2 (0) | 2022.10.18 |
Unix Programming - 1 (0) | 2022.10.18 |