C++ 기초 1

[C++] 1-12 함수의 지역 변수 / 전역 변수 설명 및 예제

hbcho 2023. 11. 21. 08:10
개요

   변수는 선언된 위치에 따라 지역 변수 (local variable)와 전역 변수 (global variable)로 나눌 수 있다. 지역 변수는 함수 내부에서 선언되며 선언된 함수 내부서만 사용되고 다른 함수에서는 사용할 수 없다. 반면 전역 변수는 함수 외부에서 선언되며 모든 함수에서 사용할 수 있다. (참고로 C++에서 변수 선언은 함수의 시작 부분에 선언하는 것이 바람직한 프로그램 작성법이라 할 수 있다.)

지역변수

   지역 변수는 함수 내부에서만 사용되기 때문에 동일한 이름의 변수가 서로 다른 함수의 내부에서 사용되더라도 충돌이 발생하지 않는다. 따라서 함수를 이용해서 프로그래밍하는 경우, 지역 변수를 사용하면 함수의 독립성이 유지된다. 만일 동일한 이름의 변수가 지역 변수와 전역 변수로 동시에 사용되면 함수 내에서는 지연 변수가 우선적으로 사용된다. 지역 변수를 다른 함수에 사용하기 위해서는 매개변수 형태로 전달해 주어야 한다. 

전역변수

   전역 변수는 일반적으로 MAIN() 함수 앞에서 선언한다. 이렇게 되면 이 변수는 프로그램 전체에 걸쳐 사용되므로 매개변수를 사용하지 않아도 다른 함수로 데이터 전달이 가능하다. 함수의 return문은 한개의 반환 값만을 전달하기 때문에 여러 개의 값을 호출 측에 전달하려면 call by reference (포인터나 참조변수)를 활용하거나 전역 변수를 이용하면 된다. 단 전역 변수의 남용은 프로그램 작성을 복잡하게 만들고 프로그램 실행 결과가 의도와 다르게 진행될 수 있으므로 주의해야 한다. 가급적 지역변수를 이용해서 함수의 독립성을 유지시키는 게 올바른 프로그래밍이라고 할 수 있다.

 
예제 1
#include <iostream>
using namespace std;
void sub(void);
int a = 100;		//전연 변수 a를 선언

int main()
{
	int a = 123;
	cout << "local_a=" << a << endl;
	sub();
	cout << "local_a=" << a << endl;
	return 0;
}

void sub(void)
{
	a = a + 200;
	cout << "global_a=" << a << endl;
}
결과
local_a=123
global_a=300
local_a=123
※ 동일명의 변수 a가 지역 변수 (main 함수 내에서 사용)와 전역 변수(프로그램 전체에 사용)로 동시에 선언되었다. 이때 main 함수 내에서는 지역변수가 우선적으로 사용된다.
예제 2
#include <iostream>
using namespace std;
void sub(void);
int a, b, x, y;			//전역 변수 선언

int main()
{
	a = 500;
	b = 200;
	sub();			//매개변수 없이 함수 호출
	cout << "a=" << a << ",b=" << b << ",x=" << x << ",y=" << y << endl;
	return 0;
}

void sub(void)		//전역 변수를 사용하므로 인수 불필요
{
	x = a + b;
	y = a - b;
}					//x와 y의 값을 호출 측에 전달
결과
a=500,b=200,x=700,y=300
※ a, b는 전역 변수이기 때문에 매개변수를 사용하지 않고 a와 b의 값을 sub() 함수에 전달할 수 있다. 이때 sub 함수 형태가 void더라도 x와 y도 전역 변수이기에 두 개의 값이 호출 측에 전달된다.  
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13