본문 바로가기
개념/혼자 공부하는 C언어

chapter 13) auto 지역 변수와 static 지역 변수의 비교

by kiseno 2024. 8. 27.
728x90
반응형
SMALL
#include <stdio.h>

void auto_func(void);
void static_func(void);

int main(void){
    int i;
    printf("common auto function...\n");
    for (i = 0; i < 3; i++){
        auto_func();
    }

    printf("static function...\n");
    for (i = 0; i < 3; i++){
        static_func();
    }

    return 0;
}

void auto_func(void){
    auto int a = 0;

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

void static_func(void){
    static int a;

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

- **`main` 함수**:
  - `main` 함수는 먼저 "common auto function..."을 출력한 다음, `auto_func` 함수를 세 번 호출합니다. 각 호출 후에 `auto_func` 내에서 선언된 `auto` 변수의 값을 출력합니다.
  - 이어서 "static function..."을 출력하고, `static_func` 함수를 세 번 호출합니다. 마찬가지로, 각 호출 후에 `static_func` 내에서 선언된 `static` 변수의 값을 출력합니다.

- **`auto_func` 함수**:
  - `auto` 지정자를 사용하여 지역 변수 `a`를 선언하고 0으로 초기화합니다. `auto` 지정자는 지역 변수의 기본 저장 클래스를 나타내며, 일반적으로 생략됩니다. `auto` 변수는 함수가 호출될 때마다 초기화됩니다.
  - 변수 `a`의 값을 1 증가시킨 후, 그 값을 출력합니다. `auto_func`가 호출될 때마다 `a`는 0으로 재초기화되므로, 출력값은 항상 1입니다.

- **`static_func` 함수**:
  - `static` 지정자를 사용하여 지역 변수 `a`를 선언합니다. `static` 변수는 프로그램 실행 시 한 번만 초기화되고, 함수 호출 간에 그 값이 유지됩니다. 초기화를 명시적으로 지정하지 않으면 0으로 초기화됩니다.
  - 변수 `a`의 값을 1 증가시킨 후, 그 값을 출력합니다. `static_func`가 여러 번 호출되더라도 `a`는 초기화되지 않으며, 그 값은 함수 호출 간에 유지됩니다. 따라서 첫 번째 호출에서 `a`는 1이 되고, 이후의 호출에서는 값이 계속 증가하여 출력됩니다.

728x90
반응형
LIST