Nagie's DevStory

[C] 37. 변수의 생명 주기와 사용 범위 본문

Programming/C

[C] 37. 변수의 생명 주기와 사용 범위

Nagie 2023. 10. 6. 00:32
728x90

C에서 변수는 선언한 위치에 따라 접근 범위와 변수의 수명이 달라진다.
 
총 3가지의 구분 방법이 있으며 각각의 특징은 아래와 같다.
 


변수의 구분

선언 위치

지역 변수 ( LOCAL )

함수 안에 선언

전역 변수 ( GLOBAL )

함수 밖에 선언

정적 변수 ( STATIC )

static 키워드를 사용해 함수 안과 밖에 선언

 
표를 봐도 이해가 힘들 경우 아래의 코드를 참고하면 된다.
 

#include <stdio.h>

int g_nGlobal = 30; //전역 변수

static int g_nStGlobal = 50; //정적 전역변수

int main () {

    int nLocal = 10; //지역 변수

	static int nStLocal = 99; //정적 지역변수
}

 
선언 위치까지는 알겠는데 사용 범위가 궁금할 수도 있다.
 
지역 변수는 함수 안에서만 사용할 수 있으며 해당 함수 밖에선 사용할 수 없다.
 
전역 변수는 프로젝트 전체에서 사용할 수 있으며 잘 사용만 한다면 좋은 결과를 나타낼 수 있지만
 
프로젝트 전체에서 사용 가능하다는 특성 덕에 버그를 만들어 내기도 한다.
 
사용 시 주의가 필요하다.
 
정적 변수는 선언된 함수 안이나 선언된 소스 파일에서만 사용할 수 있다.
 
간단하게 표로 나타내면 아래와 같다.
 


변수의 구분

사용 범위

지역 변수 ( LOCAL )

함수 안에서만 사용가능

전역 변수 ( GLOBAL )

프로젝트 전체에서 사용 가능

정적 변수 ( STATIC )

선언된 함수 안 또는 소스 파일에서만 사용 가능

 
그리고 각각의 변수들은 생성과 소멸 시기가 다르며
 
이를 변수의 생명주기(라이프 사이클)라 부른다.
 
우선 지역 변수는 함수 호출 시 메모리에 생성되며 함수가 종료되면 소멸한다.
 
전역 변수는 프로그램을 실행하면 메모리에 생성되며 프로그램이 종료 될 때까지 소멸하지 않는다.
 
정적 변수는 어디에 선언하는지에 따라 생성 시기와 소멸 시기가 다르다.
 
즉 생성은 선언 위치에 따라 지역 변수나 전역변수처럼 생성 될 순 있지만
 
소멸 시기는 프로그램이 종료 될 때까지 소멸하지 않는다.
 
또한 각각의 변수는 초깃값을 가지고 있다.
 
지역 변수는 선언 시 무조건 초기화를 해줘야 하고
 
전역변수와 정적변수는 초기화를 하지 않아도 숫자 0이 초깃값으로 지정된다.
 
 

728x90
Comments