Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 자동(auto) 스토리지 클래스 완벽 정리 – 개념부터 예제까지

C 프로그래밍 언어에는 크게 네 가지 저장 클래스(storage class)가 있습니다.

  • auto
  • extern
  • static
  • register

이 중 이번 글에서는 자동(auto) 스토리지 클래스에 대해 자세히 알아보겠습니다.

자동 변수(Automatic Variables)와 지역 변수(Local Variables)

자동 스토리지 클래스를 나타내는 키워드는 auto입니다. 자동 변수는 흔히 말하는 지역 변수와 같은 의미로 사용되며, 함수나 블록이 실행될 때 메모리가 할당되고 종료되면 자동으로 해제되는 특징을 가집니다.

변수의 범위(Scope)

  • 지역 변수의 범위는 해당 변수가 선언된 블록 내부로 제한됩니다.
  • 이러한 변수들은 블록(중괄호 {}) 안쪽에 선언됩니다.
  • 기본값(초기화하지 않은 경우): 쓰레기 값(garbage value)

동작 알고리즘

아래 알고리즘은 블록마다 같은 이름의 자동 변수를 선언했을 때 어떤 값이 출력되는지 보여줍니다.

시작
Step 1: 자동 변수 int i = 1 선언 및 초기화
    Ⅰ. 자동 변수 int i = 2 선언 및 초기화
       Ⅰ. 자동 변수 int i = 3 선언 및 초기화
       Ⅱ. i 값 출력 → 3
    Ⅱ. i 값 출력 → 2
Step 2: i 값 출력 → 1
종료

예제 1: 블록별 자동 변수 확인하기

다음은 auto 스토리지 클래스의 동작을 보여주는 C 프로그램입니다.

#include<stdio.h>
main ( ){
    auto int i=1;{
        auto int i=2;{
            auto int i=3;
            printf ("%d",i)
        }
        printf("%d", i);
    }
    printf("%d", i);
}

출력 결과

3 2 1

실행 결과를 보면 각 블록 내부에서 선언된 i가 서로 다른 독립적인 변수임을 알 수 있습니다. 즉, 가장 안쪽 블록의 i(값 3)가 먼저 출력되고, 블록을 벗어날 때마다 바깥쪽 변수(값 2, 1)가 순서대로 출력됩니다. 이것이 바로 자동 변수가 블록 단위 범위(scope)를 가진다는 것을 보여주는 예입니다.

예제 2: 함수 내에서 자동 변수 활용하기

다음은 함수 내부에서 자동 변수를 선언해 두 수의 곱을 계산하는 프로그램입니다.

#include<stdio.h>
int mul(int num1, int num2){
    auto int result; // 자동 변수 선언
    result = num1*num2;
    return result;
}
int main(){
    int p,q,r;
    printf("enter p,q values:");
    scanf("%d%d",&p,&q);
    r = mul(p, q);
    printf("multiplication is : %d\n", r);
    return 0;
}

출력 결과

Run 1: enter p,q values:3 5
multiplication is : 15
Run 2: enter p,q values:6 8
multiplication is : 48

함수 mul() 안에서 선언된 result는 자동 변수이므로 함수 호출 시 생성되고, 함수가 반환되면 메모리에서 사라집니다. 실행할 때마다 새로운 메모리 공간이 할당되기 때문에 입력값에 따라 항상 올바른 결과를 얻을 수 있습니다.

정리

  • auto 키워드로 선언된 변수는 지역 변수이며, 선언된 블록 안에서만 유효합니다.
  • 블록이 끝나면 변수는 자동으로 소멸되므로 다른 블록의 같은 이름 변수와 충돌하지 않습니다.
  • 초기화하지 않으면 쓰레기 값(garbage value)을 가지므로 반드시 초기화 후 사용하는 것이 좋습니다.
  • 함수 내 지역 변수에는 기본적으로 auto가 적용되므로, 실무에서는 키워드를 생략하는 경우가 많습니다.