본문 바로가기
IT 기술/C언어 심화

함수의 지역 변수와 전역 변수

by 썬's 2023. 2. 14.

안녕하세요 보글리아입니다.

이번 시간에는 C언어의 함수에서 사용하는 개념인

지역 변수와 전역 변수에 대해 설명드리겠습니다.

※함수에 대한 내용은 8, 9, 10일 차를 참조해 주시기 바랍니다※

※본 수업에 들어가기 앞서 요약을 먼저 하겠습니다※

 


요약

  • C언어는 함수의 작업 기본 단위로 변수를 함수 안이나 바깥에 선언 가능하다.
  • 지역 변수 :  함수 안에서만 사용 가능한 변수(매개변수와 함수 내 선언한 변수)
  • 전역 변수 : 함수 밖에 선언한 변수로 프로그램 전체에서 사용 가능한 변수

 

지역 변수

C언어에서 함수를 선언하고 함수 내에 선언한 변수와 매개변수는 지역변수입니다.

지역 변수로 이루어진 함수를 호출하면, 지역 변수가 실행됐다가 함수 호출이 끝나면 지역 변수도 함수와 함께 사라집니다.

 

이러한 원리를 그림으로 보면 함수를 선언하고 함수 내 지역변수 a를 선언했다고 하면, 함수를 호출 시 컴퓨터 메모리에 저장 공간이 만들어지고 이 저장 공간으로 함수가 들어옵니다. 그럼 지역변수 a도 함수의 일부라서 따라 들어오겠죠?? 그리고 함수 호출이 끝나면 저장공간이 사라지기 때문에 자동으로 함수와 지역 변수도 함께 사라집니다.

지역 변수
지역 변수

 

하단 코드를 보시면 main 함수와 Num 함수가 있습니다. main 함수에 Num 함수를 호출해 보겠습니다.

총 두 가지 방법을 보여드리겠습니다.

 

첫 번째로는 함수에 바로 접근하는 방법입니다. Num 함수를 선언하고 지역 변수로 a를 선언한 후 이 함수를 main 함수에 호출했습니다. 특정 함수에 다른 함수를 작성하면, 그 시점에서 함수가 호출된 것으로 봅니다. 그리고 Num 함수를 출력하면 그 지역 변수인 a의 값인 5가 나오고, main 함수 끝에 return을 만나 메모리의 저장공간이 소멸되면서, 자동으로 그 저장공간에 있던 Num 함수도 사라집니다. 정상적으로 값이 5가 나오는 것을 볼 수 있습니다.

#include <stdio.h>

int Num() // 함수 선언
{
	int a = 5; // 지역 변수 a 선언
	return a;
}

int main()
{
	Num(); // 함수 호출
	printf("%d \n", Num()); // Num 함수의 반환값인 a의 값 출력

	return 0;
}

출력 결과
출력 결과

 

두 번째 방법으로는 지역 변수로 다른 함수에 지역 변수의 값에 접근하는 방법입니다.

하단 코드를 보시면 main 함수 내 지역 변수인 result를 선언했습니다. 그리고 이 지역 변수에 Num 함수를 대입하면, result는 Num 함수 내 지역 변수인 a의 값에 접근할 수 있습니다. 즉, result는 곧 a의 값인 5를 반환한다고 보실 수 있습니다. result를 출력하면, 값이 5가 나온 것을 보실 수 있습니다.

#include <stdio.h>

int Num() // 함수 선언
{
	int a = 5; // 지역 변수 a 선언
	return a;
}

int main()
{
	int result; // main 함수 내 지역 변수 선언
	result = Num(); // main 함수의 지역변수에 Num 함수를 대입해, Num의 지역변수인 a에 접근
	printf("%d \n", result); // Num 함수의 반환값인 a의 값 출력

	return 0;
}

출력 결과
출력 결과

마지막으로 지역 변수의 이름은 동일해도 됩니다.

하단 코드에 Num 함수 선언 후 지역 변수인 a, b, result를 선언했습니다. main 함수는 지역 변수인 result를 선언했습니다. 이는 지역 변수의 특징이 해당 함수 내에서만 사용이 가능하기 때문에 변수명이 같아도 됩니다. 그리고 중요한 점이 있는데, 지역 변수는 해당 함수 내에서만 사용이 가능합니다. 그렇기에 main 함수에 result는 Num 함수의 지역 변수인 a, b, result에 접근할 수 없습니다. 이를 해결하기 위해 Num함수를 빌려와 Num의 지역 변수에 접근이 가능합니다.

코드를 출력해 보면 정상적으로 값이 11이 나온 것을 보실 수 있습니다.

#include <stdio.h>

int Num(int a, int b) // 매개변수 a, b는 Num의 지역 변수
{
	int result = a + b; // Num 함수 내 지역 변수인 result
	return result;
}

int main()
{
	int result; // main 함수 내 지역 변수인 result
	result = Num(2, 9); // Num의 지역 변수인 a, b, result를 사용할 수 없어, 함수를 빌려 진입
	printf("%d \n", result);

	return 0;
}

출력 결과
출력 결과

 


전역 변수

C언어에서 전역 변수는 함수 밖에 선언한 변수를 말합니다. 

전역 변수는 프로그램 전체에서 사용이 가능하기 때문에, 프로그램이 시작될 때 함께 만들어졌다가 프로그램이 종료되면 같이 소멸됩니다. 전역 변수는 프로그램 전체에서 사용이 가능하기 때문에 지역 변수와 같이 이름이 같으면 안 됩니다.

 

하단 그림을 보시면, 하나의 프로그램이 있을 때, 전역 변수는 프로그램 전체는 물론 함수 내에서도 지역 변수와 함께 사용이 가능합니다. 그렇기에 전역 변수는 한 번 선언하면 어떤 함수에서든 사용이 가능합니다.

전역 변수
전역 변수

 

하단 코드를 보시면 변수 result와 result2를 특정 함수가 아닌 말 그대로 외부에다가 선언했습니다. 이를 전역 변수라 합니다. 함수 Num과 Num2 선언 후 전역 변수에 각각 값을 대입했습니다. Num에는 result 전역 변수에 값을 대입하고, Num2에는 result2에 Num2 지역 변수인 data1과 data2를 더한 값을 대입하고 이를 전역 변수 result2로 반환합니다.

즉, 전역 변수인 reuslt1과 result2는 어디서든 사용이 가능하기 때문에 함수 내부에 선언이 가능합니다.

 

그리고 이를 main 함수에서 두 함수를 호출 후 값을 출력하면 정상적으로 값이 나오는 것을 보실 수 있습니다.

#include <stdio.h>

int result; // 전역 변수
int result2; // 전역 변수

void Num() 
{
	result = 50; // 전역 변수 사용
}

int Num2(int data1, int data2)
{
	result2 = data1 + data2; // 전역 변수 사용
	return result2; // 전역 변수 반환
}

int main()
{
	Num(); // 함수 호출
	Num2(5, 7); // 함수 호출

	printf("%d \n", result);
	printf("%d \n", result2);

	return 0;
}

출력 결과
출력 결과


오늘은 함수의 전역 변수와 지역 변수 개념을 배워 봤습니다.

그럼 다음 시간에는 추가로 static과 extern 키워드를 가르쳐 드리겠습니다.

긴 글 읽으시느라 너무너무 고생 많으셨습니다~~

'IT 기술 > C언어 심화' 카테고리의 다른 글

컴퓨터의 자료 저장 방식  (0) 2023.02.19
연산자 우선순위 및 연산 방향  (0) 2023.02.19

댓글