변수의 가시 범위와 생존기간

2022. 7. 11. 12:57·C++ 프로그래밍/함수

변수와 함수는 밀접하게 관련되어 있습니다.

예를 들어, 함수가 끝나면 지역 함수 내의 변수들과 매개변수들은 모두 자동으로 소멸됩니다.

모든 변수는 다음의 세 가지 속성이 있고, 이러한 속성에 따라 여러 가지로 분류할 수 있습니다.

  • 범위(visibility): 코드 내에서 변수가 의미 있는 영역
  • 생존기간(lifetime): 만들어지는 시점과 소멸되는 시점
  • 연결(linkage): 외부에서 선언된 변수를 사용하는 방법

지역변수와 전역변수

변수는 의미를 갖는 범위에 따라 지역변수와 전역변수로 나눌 수 있습니다.

 

지역(local) 변수

  • 중괄호 { }로 정의되는 블록 안에서 선언되는 변수로 블록 범위(block scope)를 갖는다. 함수 안에서 선언된 변수가 대표적인데, 변수가 선언된 블록(함수 몸체) 안에서만 의미가 있고 외부에서는 의미가 없다.
  • 중첩된 블록에서는 선언된 블록과 그 내부의 블록들에서만 의미가 있다.
  • 선언 위치에서 만들어지고 해당 블록의 끝나면 소멸된다.
  • 함수의 매개변수도 일종의 지역변수로 함수가 종료되면 소멸된다.

전역(global) 변수

  • 함수의 외부에서 선언되고, 파일 범위(file scope)를 갖는다.
  • 변수가 선언 위치 이후부터 파일의 끝까지 어떤 함수나 블록에서도 접근이 가능하고, 따라서 여러 함수에서 동일한 자료를 공유할 수 있다.
  • 프로그램이 시작할 때 만들어지고, 프로그램이 끝나야 없어진다.
  • "자료를 공유한다" 라는 것은 편리하지만 프로그램 모듈(함수 같은거라고 이해해도 된다)들이 연관되는 문제가 발생한다. 이것은 어떤 함수가 다른 함수에 의도하지 않은 영향을 줄 수 있게 되고, 결국 프로그램을 매우 불안정하게 만들 수 있다.

 


#include <stdio.h>
int Version; //Version은 전역변수 이므로 이후 모든 부분에서 이용 가능함
int Count; //Count도 전역변수 이므로 이후 모든 부분에서 이용 가능함

int add(int a, int b); //add함수 원형 선언
int main()
{
	int x = 10; //x는 main함수 블록에서 선억된 지역 변수로 main함수가 끝날 때까지만 사용 가능
	for (int i = 0; i < x; i++) //for문에서 선언된 i는 for문 블록내에서만 사용 가능 
	{
		//...
	}
	while (true)
	{
		int y; //y는 while 블록에서 선언된 지역변수이므로 while루프 안에서만 사용 가능
	}
	int z; //main함수 내에서 선언된 z도 지역변수로 이후부터 함수 블록 끝날때까지 사용 가능
	z = add(3, 4);
	//...

	return 0;
}
int add(int a, int b) //함수의 매개변수 a와 b도 지역변수로 함수 블록에서만 사용 가능
{
	int sum = a + b; //지역변수 sum도 add함수 블록에서만 사용 가능
	return sum;
}
저작자표시 비영리 변경금지 (새창열림)

'C++ 프로그래밍 > 함수' 카테고리의 다른 글

함수로 배열을 전달, 반환  (0) 2022.07.21
C++의 Static을 알아보자  (0) 2022.07.11
디폴트 매개변수  (0) 2022.06.30
라이브러리 함수와 사용자 정의 함수  (0) 2022.06.29
parameter와 argument 차이점  (0) 2022.06.24
'C++ 프로그래밍/함수' 카테고리의 다른 글
  • 함수로 배열을 전달, 반환
  • C++의 Static을 알아보자
  • 디폴트 매개변수
  • 라이브러리 함수와 사용자 정의 함수
같은편
같은편
책을 통해 이때까지 블로그나 유튜브에서 얻었던 지식의 파편들을 정립하고 합쳐 단단한 발판으로 만들기 위한 블로그
  • 같은편
    홍익대 게임소프트웨어전공의 프로그래밍 단련 공간
    같은편
  • 전체
    오늘
    어제
    • 분류 전체보기 (88) N
      • 게임 프로그래밍 패턴 (2)
      • C# 프로그래밍 (26)
      • C++ 프로그래밍 (32)
        • 함수 (8)
        • 클래스 (22)
      • 알고리즘 공부 (16) N
        • 백준 사이트 문제(C++) (3) N
        • codingame 사이트 문제(C#) (11)
      • 유니티엔진 - 게임 공부 (3)
      • 언리얼엔진 - 게임 공부 (4)
      • 쓸모 있을 수 있는 팁 (2)
      • 일상이야기 (3)
  • 링크

    • 깃허브
  • 인기 글

  • 태그

    DFS
    클래스
    함수
    문제 풀이
    탐욕 알고리즘
    예외 처리
    task
    비동기
    스레드
    queue
    복사 생성자
    객체
    언리얼엔진
    언리얼엔진4
    C#
    최단 경로
    언리얼
    람다식
    알고리즘
    c++
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
같은편
변수의 가시 범위와 생존기간
상단으로

티스토리툴바