Developer

24.(C언어) 지역변수와 전역변수 본문

Programming Language/C

24.(C언어) 지역변수와 전역변수

DPhater 2020. 8. 1. 22:08

지역변수

지역변수는 변수가 선언된 { }(중괄호) 내부에서만 사용이 가능한 변수이다.

중괄호로 묶인 부분을 블록(Block)라고 하는데 지역변수는 선언된 블록 내부에서만 사용이 가능한 것이다.

(아직 함수를 배우지 않았지만 선언된 함수 내부에서만 사용할 수 있는 변수이다.)

다음 3가지 코드를 보며 변수의 범위를 알아보자.

#include<stdio.h>

int main() {
    int a=3;
	{
        a++;
		printf("내부 : %d\n", a);
	}
    printf("외부 :%d\n",a);
	return 0;
}

코드1 실행 결과

main함수의 시작에 변수a를 선언하고 3으로 초기화했다.

블록의 내부에서 변수 a를 사용하지만 이 블록도 main함수의 내부이므로 정상적으로 변수 a를 사용할 수 있다.

#include<stdio.h>

int main() {
	{
		int a=4;
		a++;
		printf("내부 : %d\n", a);
	}
	printf("외부 :%d\n", a);
	return 0;
}

코드2 : 컴파일 에러

코드2의 경우 컴파일 에러가 발생하였다. 왜냐하면 블록 내부에 선언된 변수 a는 블록 내부에서만 사용가능하다.

따라서 printf("외부 :%d\n", a);코드가 시작되는 시점에서 a는 선언되어 있지 않은 변수이기 때문에 컴파일 에러가 발생한 한다.

 

#include<stdio.h>

int main() {
	int a = 3;
	{
		int a=4;
		a++;
		printf("내부 : %d\n", a);
	}
	printf("외부 :%d\n", a);
	return 0;
}

코드3 실행 결과

블록 내부의 출력 결과와 외부의 출력 결과가 다르게 나왔다. 편의상 main함수 시작에 선언된 변수a를 a1 블록 내부에서 선언된 변수 a를 a2라고 하겠다.

물론 블록 내부에서도 a1 변수가 사용가능하다. 하지만 코드3처럼 블록 내부의 변수와 외부의 변수의 이름이 같을 경우 내부의 변수를 사용한다. 따라서 블록 내부의 a++;는 a2만 증가시키고 외부의 a1은 아무런 변화도 없이 3이 출력된것이다.

전역변수

지역변수는 해당 지역에서만 사용할 수 있는 변수이다. 반대로 전역변수는 코드의 모든 곳에서 사용할 수 있는 변수이다.

전역 변수는 함수 외부에 선언하고, 모든 함수에서 사용할 수 있다.

#include<stdio.h>

int a = 4;

int main() {
	printf("%d\n", a);
	return 0;
}

코드4 실행 결과

 

코드4에서는 전역변수 a를 선언하였다. 이 변수 a는 해당 파일 모든 곳에서 접근이 가능하다. 코드3과 마찬가지로 만약 main함수 내부에 전역 변수와 똑같은 이름의 변수가 선언되어있다면 지역 변수가 사용된다.

지역변수는 변수를 선언한 함수나 블록이 종료되면 사라지고, 전역변수는 프로그램이 끝날 때 사라진다. 또 전역변수의 특징으로는 초기화 하지않으면 자동으로 0으로 초기화 해준다는 점이 있다.

'Programming Language > C' 카테고리의 다른 글

26.(C언어) 함수(2)  (0) 2020.08.01
25.(C언어) 함수(1)  (0) 2020.08.01
23.(C언어) 공용체, 열거형  (0) 2020.08.01
22.(C언어) 구조체(3)  (0) 2020.08.01
21.(C언어) 구조체(2)  (0) 2020.08.01
Comments