C/C

static

HicKee 2022. 9. 29. 12:48

static

static 전역 변수는 항상 해당 변수가 선언된 파일 내부에서만 참조가 가능

internal linkage(내부 연결성)
  - 파일 내부에서만 참조 가능한 static 의 성질

 

함수 내부 선언

#include <stdio.h>

void increaseNumber() {

    static int sNum = 0; // <- 선언 위치

    printf("%d\n", sNum);

    sNum++;    
}

int main() {

    increaseNumber();    // 0
    increaseNumber();    // 1
    increaseNumber();    // 2
    increaseNumber();    // 3

    //printf("%d", sNum); //사용할 수 없다

}

출력

0
1
2
3

외부에 선언

선언 후 위치에 상관없이 프로그램의 시작부터 프로그램 종료 시 까지
메모리에 할당되어 그 값을 마음대로 바꿀수 있다.
정적 변수는 함수를 벗어나더라도 변수가 사라지지 않고 계속 유지
++ 같은 연산자 사용시 계속 값이 증가

 

main문 밖에서 선언하게 되면, main에서나 increaseNumber에서도 사용이 가능
선언 위치는 자유 그에 따른 제약에 주의가 필요

 

#include <stdio.h>
static int sNum = 0;// <- 선언 위치

void increaseNumber() {

    printf("%d\n", sNum);
    sNum++;
     
}

int main() {

    increaseNumber();    // 0
    increaseNumber();    // 1
    increaseNumber();    // 2
    increaseNumber();    // 3

    //printf("%d", sNum); // 4
}