C언어 static 변수 - 값이 유지되는 변수

코딩C언어
읽는데 4분 소요
처음 쓰여진 날: 2026-02-03
마지막 수정일: 2026-02-03
조회수: 8

요약

C언어 static 변수의 개념과 동작 방식을 알아봅니다. 함수 내 static 변수가 호출 간에 값을 유지하는 원리, 지역 변수와의 차이점을 정보처리기사 실기 기출문제와 함께 정리합니다.

static 변수 핵심 정리

특성지역 변수static 변수
초기화함수 호출마다 초기화프로그램 시작 시 한 번만 초기화
값 유지함수 종료 시 소멸함수 종료 후에도 값 유지
저장 위치스택(Stack)데이터(Data) 영역
기본값쓰레기 값0

static 변수란?

static은 "정적인", "고정된"이라는 뜻입니다. static 변수는 메모리에 고정된 위치에 저장되어, 함수가 종료되어도 값이 사라지지 않고 유지되는 변수입니다.

용어의미
static (정적)고정된 위치에 유지됨
dynamic (동적)필요할 때 생성/소멸됨
c
코드 하이라이팅 중...
구분첫 번째 호출두 번째 호출세 번째 호출
static int x = 0246
int x = 0222
static 변수 vs 일반 변수 비교
static 변수는 값이 유지되어 2 → 4 → 6으로 누적되지만, 일반 변수는 매번 0에서 시작해서 항상 2입니다.

static 변수 vs 지역 변수

지역 변수 (매번 초기화)

c
코드 하이라이팅 중...

지역 변수는 함수가 호출될 때마다 새로 생성되고, 종료되면 소멸합니다.

static 변수 (값 유지)

c
코드 하이라이팅 중...

static 변수는 프로그램 시작 시 한 번만 초기화되고, 이후에는 이전 값이 유지됩니다.

static 변수와 지역 변수 비교
지역 변수는 매번 0에서 시작하지만, static 변수는 이전 값에서 이어집니다.


동작 원리

메모리 저장 위치

변수 종류저장 위치특징
지역 변수스택(Stack)함수 호출/종료 시 생성/소멸
static 변수데이터(Data) 영역프로그램 실행 동안 유지
전역 변수데이터(Data) 영역프로그램 실행 동안 유지

static 변수는 전역 변수처럼 데이터 영역에 저장되지만, 접근 범위는 함수 내부로 제한됩니다.

초기화 시점

c
코드 하이라이팅 중...

static int count = 0; 코드는 컴파일 시점에 처리되어, 프로그램이 시작할 때 데이터 영역에 0으로 초기화됩니다. 함수가 호출될 때마다 이 초기화 코드가 실행되는 것이 아닙니다.


static 변수 vs 전역 변수

둘 다 프로그램 실행 동안 값이 유지되지만, 접근 범위가 다릅니다.

c
코드 하이라이팅 중...
구분전역 변수static 변수
값 유지OO
어디서든 접근OX (선언된 함수 내부만)
이름 충돌 위험있음없음

실행 흐름 추적

24년 3회 기출문제를 예시로 실행 흐름을 추적해보겠습니다.

c
코드 하이라이팅 중...

변수 구분

  • mainx: 지역 변수, 루프마다 1씩 증가 (출력에 영향 없음)
  • increasex: static 변수, 호출마다 2씩 증가하며 값 유지

반복별 실행

반복increase 호출 전 static xincrease 실행 후 static xsum
i=0020 + 2 = 2
i=1242 + 4 = 6
i=2466 + 6 = 12
i=36812 + 8 = 20

출력: 20


정보처리기사 실기 대비 문제