#2-1. 지역 변수와 전역 변수

Kal·2021년 7월 17일
0

C언어

목록 보기
2/17

함수 안에서만 사용하는 지역 변수와 프로젝트 전체에서 사용하는 전역 변수의 차이를 알아본다.

1. 지역 변수 (Local Variable)

* 지역 변수 (Local Variable) : 함수 내에서만 사용이 되는 변수로, 함수와 수명(Lifetime)이 같다. 함수 호출이 끝나면 함수와 함께 사라진다.

  • 지역 변수로 인해 오류가 생긴 코드 (c.1)
#include <stdio.h>
int ReturnNum()
{
int num = 5;
return num;
}

void main()
{
ReturnNum();
printf("%d", num);

-> 전형적인 오류 코드의 예시. ReturnNum이라는 함수를 main함수가 호출하지만, ReturnNum 함수에서만 영향을 미치는 num이라는 지역 변수가 main에 선언돼있지 않기 때문에 오류가 발생한다.

따라서 올바른 코드로 고쳐보면, (c.2)

#include <stdio.h>
int ReturnNum()
{
int num = 5;
return num;

}

void main()
{
int r = ReturnNum();
printf("%d", r);

}

이렇게 r이라는 지역 변수 (main함수에서만 작용하는 지역 변수)를 포함하여야 num이 초기화 되어도 r 변수에 값이 저장되므로 오류를 방지할 수 있다.

Q. 지역 변수 이름은 중복해서 사용할 수 있다?

원래는 함수 안에 똑같은 이름의 변수가 있으면 오류로 처리되지만, 서로 다른 함수에 있는 지역 변수의 이름은 같아도 오류로 처리되지 않는다.

지역 변수는 스스로 초기화되지 않기 때문에 필요할 때 프로그래머가 직접 초기화해야 한다.

  • 변수의 사용 범위에 따른 유효성 이해하기 (c.3)
#include <stdio.h>
int Sum(int data1, int data2) /* 매개변수 data1, data2는 Sum함수의 지역 변수 */
{
int result = data1 + data2; /*Sum함수의 지역 변수 result를 선언한 후 data1+data2값으로 초기화함 */
return result;
}

void main()

{
int result; /*main함수의 result는 Sum함수의 result값과 공유되지 않는다. 서로 다른 지역함수이기 때문에, 
그리고 초기화되지 않아서 어떠한 값이 들어있는지 알 수 없음 */
result = Sum(5,3);
printf("5+3=%d\n", result);
}

2. 전역 변수 (Global Variable)

* 전역 변수 (Global Variable) : 함수 밖에 선언한 함수. 프로그램의 시작과 종료를 같이한다. 수명이 프로그램과 같다.

  • 프로그램 전체 영역에서 사용되므로 똑같은 이름을 가진 전역 변수가 또 있으면 오류 발생. 주의해서 사용 요망

  • 함수의 독립성을 강조하는 C언어의 장점을 퇴색시키므로 꼭 필요한 경우에만 사용한다.

  • 전역 변수를 사용하여 함수 간에 데이터 넘겨받기 (c.4)
#include <stdio.h>
int result; /*전역 변수. 특별한 초기화 값이 없으면 0으로 초기화됨*/

void Sum(int data1, int data2)
{
result = data1 + data2; /* return 명령으로 값을 반환하지 않아도 전역 변수에 저장된 값을 
main함수에서 사용할 수 있음. */
}

void main()
{
Sum(5,3);
printf("5+3=%d\n", result); /* 위의 전역 변수 result값이 그대로 들어감. 범함수 변수 */

/* 전역 변수는 한 번 선언하면 프로그램 전체 영역에서 사용할 수 있기 때문에 
Sum함수와 main함수 어디에서든 result 변수를 사용할 수 있다. (값을 공유함) */
}
  • 전역 변수는 한 번 선언하면 어떤 함수에서도 사용할 수 있으며, 프로그램 전체에서 값을 공유한다.

따라서, return 명령을 사용하여 Sum 함수 반환값을 넘겨받지 않아도 전역 변수의 값을 공유하여 간단하게 처리할 수 있다.

  • 전역 변수를 사용할 때 주의할 점 : 꼭 필요할 시에만 사용하는 습관을 들이자. 웬만해서는 지역 변수를 사용하는 것이 좋다.

Q. 전역 변수와 지역 변수의 이름이 같다면?

  • 기본적으로 C언어 문법은 전역보다 지역을 우선해서 처리한다.
  • 전역 변수와 지역 변수의 이름이 같을 때 문제점 살펴보기
#include <stdio.h>
int result; /* 전역 변수, 특별한 초기화 값이 없으면 0으로 초기화된다. */

void Sum(int data1, int data2)
{
int result; /* 지역 변수 */
result = data1 + data2; /*지역 변수의 우선순위가 높기 때문에 연산 결과 값은 지역 변수에 저장된다. */
}

void main()
{
Sum(5,3);
printf("5 + 3 = %d\n", result); /* main에 적용되는 result 변수는 전역 변수이므로, 
0으로 초기화되었던 전역 변수 result 값을 받으므로 출력값이 0이 된다. */
}
  • 이런 문제가 발생하는 것을 방지하기 위해서 int g_result 같은 ' 전역 변수' 임을 나타내는 이름으로 선언하는 것이 좋다.
profile
프로그래밍 독학

0개의 댓글