일반적인 변수를 구분할 때는 데이터의 형태로(정수, 소수, 문자 . . .) 구분하지만
사용할 수 있는 범주에 따라서 구분하기도 하는데
이를 지역변수와 전역변수 라고 합니다.
이 두 가지 변수는 프로그램 내 모든 곳에서 사용할 수 있느냐 없느냐에 따라 구분합니다.
코딩 시 중괄호 내의 범위를 블록이라고 칭하는데,
이 블록이라는 범위는 함수가 될 수도 있고 if 문이나 for 문이 될 수도 있습니다.
지역변수의 경우 블록 내에서만 사용이 가능하고,
전역변수의 경우 프로그램 전체에서 사용이 가능하다는 차이만 숙지하면 되겠습니다.
그럼 전역변수는 어떤 경우에 사용할까요 ?
예제 < 가로, 세로 길이를 입력받은 후, 함수를 이용해서 직사각형의 넓이와 둘레를 구하라. >
위 예제를 아래 소스 코드를 통해서 전역변수를 사용해야하는 시점에 대해 설명하겠습니다.
#include <stdio.h>
int Function(int d, int e);
int PERI; // 전역변수 : 프로그램 전체에 적용
int main(void)
{
int a, b, area;
printf(" 가로 세로 : ");
scanf_s("%d %d", &a, &b);
area = Function(a, b);
printf("넓이 = %d\n", area);
printf("둘레 = %d\n", PERI);
}
int Function(int d, int e)
{
int AREA; // 지역변수 : 이 함수를 탈출하면 변수가 적용되지 않음
AREA = d * e;
PERI = (d + e) * 2;
return AREA;
}
위 소스코드의 경우 함수를 통해서 넓이값 AREA와 둘레값 PERI 를 둘 다 반환하고 싶지만
return(반환값)은 하나의 값만 반환할 수 있기 때문에
AREA 밖에 반환하지 못하게 되는 상황이 연출됩니다.
이런 경우에 함수 내에서 정의한 PERI 변수를 main 함수 위에 전역변수로 선언함으로써
프로그램 전역에 PERI = (d + e) * 2; 라고 지정한 값을 할당해주어
우리가 원하는 답인 AREA 와 PERI 값을 둘 다 반환해줄 수 있게 됩니다.
전역변수의 단점 ?
이러한 상황에 유용하게 사용 가능한 전역변수지만 전역변수 또한 단점은 존재합니다.
이는 프로그램 전체에 할당해주는 만큼 지역변수에 비해서 메모리를 많이 사용한다는 것입니다.
때문에 부득이한 경우를 제외하면 가급적으로 사용하지 않는 것을 권장하는 바입니다만,
왠만한 컴퓨터의 메모리는 코딩을 아무리 많이 하더라도 부족한 경우는 보기 드뭅니다...
이론상으로만 메모리를 많이 잡아먹는다고 이해하시면 되고 크게 신경쓰실 필요는 없습니다.
특히나 우리같은 주니어 코더들은 더 더욱 그렇죠. 마음껏 사용하세요.
'Language > C, C++' 카테고리의 다른 글
[C++] C4996 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _getch. See online help for details. (0) | 2021.06.04 |
---|---|
[C] E0144 "const char *" 형식의 값을 사용하여 "char" 형식의 엔터티를 초기화할 수 없습니다 (0) | 2021.05.23 |
[C] 비트 시프트 연산의 원리 (0) | 2021.05.22 |
[C] 절댓값, 최댓값, 최솟값을 출력하는 다양한 방법 : 숏코딩(Short Coding) (0) | 2021.05.20 |
[C] C4700 초기화되지 않은 ~ 지역 변수를 사용했습니다. (0) | 2021.05.20 |