Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

nomad-programmer

[Programming/C] static 키워드 본문

Programming/C

[Programming/C] static 키워드

scii 2020. 6. 21. 02:13

카운터처럼 작동하는 함수를 다음과 같이 작성할 수 있다.

int count = 0;
int counter() {
    return count++;
}

이 코드에 문제가 무엇일까? 이 코드는 count라는 전역 변수를 사용한다.
이 변수가 전역 변수이므로 어떤 함수도 count의 값을 바꿀 수 있다. 큰 프로그램을 만들 때는 엉뚱하게 전역 변수를 바꾸는 실수를 범할 수 있기 때문에 너무 많은 전역 변수를 사용하는 건 좋지 않다.
다행히도 C는 전역 메모리에 저장하지만 특정 함수나 파일만 사용할 수 있는 변수도 만들 수 있다.

// static 키워드를 사용하면 counter() 함수가 종료되어도 이 값이 유지된다.
int counter() {
    // count는 전역 변수지만, 이 함수만 이 변수에 접근할 수 있다.
    static int count = 0;
    return count++;
}

static 키워드를 사용하면 변수를 전역 메모리에 보관하지만, 다른 함수가 count변수에 접근하면 컴파일 에러를 발생시킨다.

 

static을 사용하면 감출 수 있다.

함수 앞에도 static 키워드를 사용할 수 있다. 이때 static은 "이 *.c 파일안에 있는 코드만 이 함수를 사용할 수 있다"는 의미다. 예를 들면 다음과 같다.

// 이 변수는 이 변수를 정의한 소스 파일 안에서만 사용할 수 있다.
static int days = 365;

// 이 소스 파일 안에서만 이 함수를 호출할 수 있다.
static void update_account(int x) {
    ...
}
static 키워드는 "코드의 범위"를 통제한다. 데이터나 함수를 함부로 외부에서 접근하지 못하게 막는다.
Comments