자동 변수와 정적 변수 비교하기

  • 2 minutes to read

이 예제에서는 자동 변수와 정적 변수의 차이를 보여줍니다.

코드: memory_class_automatic_and_static_variables.c

#include <stdio.h>

// 전역 스코프에 정적 변수 i와 j를 선언하고 초기화합니다.
static int i = 10;
static int j = 20;

// sub 함수의 원형을 선언합니다. 이 함수는 정적 변수 i와 j의 값을 증가시키고 출력합니다.
void sub(void);

// sub 함수 정의: 전역 정적 변수 i와 j의 값을 증가시키고 출력합니다.
void sub(void)
{
    ++i;
    ++j;
    printf("sub -> i = %d, j = %d\n", i, j);
}

// main 함수 정의: 자동 변수 i와 j를 선언하고 초기화한 후 sub 함수를 호출하고 결과를 출력합니다.
int main(void)
{
    // main 함수 스코프에 자동 변수 i와 j를 선언하고 초기화합니다.
    int i = 100;
    int j = 100;

    // sub 함수를 두 번 호출합니다. 전역 정적 변수 i와 j의 값이 각 호출에서 증가합니다.
    sub();
    sub();

    // main 함수 스코프의 자동 변수 i와 j의 값을 출력합니다.
    printf("main -> i = %d, j = %d\n", i, j);

    // 프로그램이 정상적으로 종료되었음을 표시하기 위해 0을 반환합니다.
    return 0;
}

출력 결과:

sub -> i = 11, j = 21
sub -> i = 12, j = 22
main -> i = 100, j = 100

이 예제에서, 정적 변수 i와 j는 전역 범위에서 선언되어서 sub 함수 호출 간에 값을 유지합니다. 반면에 main 함수의 스코프에서 선언된 자동 변수 i와 j는 각 함수 호출에 대해 독립적인 값을 가집니다. 출력 결과에서 알 수 있듯이, 정적 변수는 함수 호출이 끝나더라도 메모리에 남아 있어 값을 유지하며, 자동 변수는 함수 호출이 끝나면 사라집니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com