티스토리 뷰

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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함