프로그래밍/C, C++

전역변수와 지역변수에 static 활용하기

유니디니 2020. 12. 13. 23:14
728x90
반응형

먼저 전역변수와 지역변수의 개념은 다음과 같다.

 

  • 전역변수 : 프로그램이 시작할 때, 1회 초기화되고 프로그램 종료 시까지 메모리에 존재
  • 지역변수 : 선언된 함수 내에서만 접근이 가능하며, 속해있는 함수가 반환되는 동시에 소멸

그렇다면, 지역 변수에 static을 활용하면 어떻게 될까?

 

"지역변수에 static이 붙게 되면, 전역변수와 같이 활용할 수 있다."

 

#include <stdio.h>

void test(void){
    static int n = 0;
    int test = 1;
    n = n+1;
    test = test+1;
    printf("static data : %d, local : %d\n", n, test);
}

int main(void){
    int i;
    for(i = 0; i<3; i++){
        test();
    }
    return 0;
}

Result

static data : 1, local : 1

static data : 2, local : 1

static data : 3, local : 1


코드를 해석해보면 다음과 같다. test 변수는 test()함수가 호출되어야 초기화되며, 초기값은 0이다. 또한, static int n 변수는 test() 함수가 호출되지 않으면 전역변수처럼 0으로 초기화되고, 프로그램 시작과 동시에 초기화 된다.

test()함수에 선언되어 있는 이유는 변수 접근의 범위를 제한하기 위함이다.

 

※ test()함수에 선언된 변수 n값을 main함수로 가져오기 위해서는 함수 인자와 return 값 등을 활용하면 된다.

반응형