밥한그릇배따시게
SW 개발자 블로그
밥한그릇배따시게
전체 방문자
오늘
어제
  • 분류 전체보기 (76)
    • Notice (공지) (2)
    • IT (58)
      • 학과 공부 (13)
      • Algorithm (1)
      • 42Seoul (20)
      • 데이터 과학 & 인공지능 (5)
      • go 언어 (3)
      • 블록체인 (2)
      • 왕초보 강의 (5)
      • ETC (4)
    • About Me (10)
      • 회고록 (6)
      • 일상 (4)
    • English (6)
      • 회화 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • parser
  • til
  • 왕초보
  • IT
  • 컴파일러
  • c언어
  • 컴퓨터공학
  • 오류
  • 영어공부
  • 영어표현
  • 운영체제
  • Libft
  • 회화
  • KOCW
  • GIT
  • 온라인 어학연수
  • FD
  • get_next_line
  • 스피킹
  • 전공공부
  • GNL
  • Github
  • 라이브러리
  • 42본과정
  • m1
  • vscode
  • 영어
  • 계절학기
  • 42seoul
  • cqu

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
밥한그릇배따시게

SW 개발자 블로그

[전공] C에서의 변수의 scope와 lifetime
IT/학과 공부

[전공] C에서의 변수의 scope와 lifetime

2022. 6. 11. 02:27

안녕하세요 밥한그릇입니다.

오늘은 변수들의 종류, 그리고 그 scope와 lifetime에 대해 알아보는 시간을 가질거에요.

다음 C 예제코드를 보고 그 scope와 lifetime에 대해 추측해봅시다.

int x;
static int y;

int f(int v) {
	static int a = 0;
	int b;
	...
	a++;
	b = a + v;
	...
}

다음과 같은 예제 코드가 주어졌을 때, 변수 x, y, v, a, b 의 scope와 lifetime은 각각 어떻게 될까요?

 

int x : 전역 변수

static int y : 정적 전역 변수

int v : 지역 변수 (매개변수)

static int a : 정적 지역 변수

static int b : 지역 변수

위 변수들은 이러한 종류로 구분됩니다.

 

정답은 다음과 같습니다.

 

1. x : <이 파일 및 이 파일을 참조하는 다른 파일에서도 사용 가능, 프로그램의 시작 ~ 끝>

  전역변수인 x는 프로그램 실행 시 이 파일을 참조하는 다른 파일에서 extern int x;와 같은 형태로 선언될 경우 참조될 수 있습니다. 전역변수이므로 이 프로그램의 시작부터 끝까지 메모리가 유지됩니다.

2. y : <이 파일 내부에서만, 프로그램의 시작~끝>

 static이라는 키워드를 붙이면 정적 변수로 선언되어, 변수의 범위가 이 파일 범위로 제한됩니다.

 전역변수이므로 이 프로그램의 시작부터 끝까지 메모리가 유지됩니다.

3. v : <이 함수 f 내에서만, 함수 실행 ~ 종료 시>

 v는 함수 호출 시 복사되어 온 값입니다. 이 함수가 실행되는 동안만 lifetime이 지속되며, 이 함수 안에서만 사용될 수 있습니다.

4. a : <함수 내부에서 쓸 수 있는 지역 변수, 프로그램 종료 시까지 (영원히)>

 static 지역변수는 특별한 의미를 갖습니다. 프로그램의 data 영역에 선언되어 static 지역 변수가 있는 함수가 끝나도 그 값을 유지합니다.

 Data 영역에 초기화되기 때문에 그렇습니다.

 지역 변수이므로 지역변수 특유의 scope(함수 내부)를 가집니다.

5. b : <지역 변수, 함수 종료 시>

 이때 만일 b가 main함수의 지역변수라면, 그 lifetime은 프로그램의 시작~끝이라고 볼 수 있습니다.

 


아까 static 지역 변수가 특별하다고 했는데, 그 예시를 다음과 같이 직접적으로 살펴볼 수도 있습니다.

 

static으로 선언한 경우에는 값이 1이 아닌 2로 늘어난 것을 볼 수 있습니다. static 변수의 초기화는 첫 호출 시 한번만 이루어지고, 이전의 값이 사라지지 않습니다. 때문에, 함수를 호출할때마다 a의 기존의 값에서 값이 더해지는 모습을 볼 수 있습니다.

그러나 static이 아닌 일반 지역변수로 선언한 경우에는 변수 a의 메모리가 temp()가 한번 실행되는 동안만 유지되기 때문에 그 값이 매번 새롭게 초기화되어 1이라는 출력을 유지하는 것을 볼 수 있게 됩니다.

(예시) static 지역 변수와 일반 지역 변수의 차이

 

참고) 이 포스팅은 다음의 포스팅을 참고하였으며, 더 많은 정보를 얻으시려면 다음 링크를 참고하세요.

더보기

https://code4human.tistory.com/128

 

c언어 정적변수, 지역변수, 전역변수 비교 (static, local, global)

함수 내에서 사용하는 변수로서 지역변수, 전역변수, 정적변수의 차이를 알아본다. [전체 요약] ☑️ 지역변수(local variable, 자동변수)는 중괄호 내부, 함수의 매개변수(Parameter)에서 사용되는 변

code4human.tistory.com

 

저작자표시

'IT > 학과 공부' 카테고리의 다른 글

[C] 읽기 전용 메모리 공간  (0) 2022.08.03
[컴파일러] LR 파서 문제 풀이  (0) 2022.06.11
[컴파일러] LL(1) 파서 문제 풀이  (0) 2022.06.11
[컴파일러] LL 파서와 LR 파서  (0) 2022.06.10
C에서 시그널을 보내고 처리하는 방법 (kill, signal, sigaction)  (0) 2022.01.06
    'IT/학과 공부' 카테고리의 다른 글
    • [C] 읽기 전용 메모리 공간
    • [컴파일러] LR 파서 문제 풀이
    • [컴파일러] LL(1) 파서 문제 풀이
    • [컴파일러] LL 파서와 LR 파서
    밥한그릇배따시게
    밥한그릇배따시게
    공부하고 정리한 내용 중, 공유할만한 내용들을 포스팅합니다. / 소프트웨어 학사 (2025년도 2월 졸업)

    티스토리툴바