본문 바로가기
c언어

c언어 전역 변수 알아보기

by 개발자 L 2022. 12. 6.
반응형

c언어 전역 변수 알아보기

네 안녕하세요, 이번 포스팅에서는 c언어에서 사용하는 변수 중 하나인 전역 변수에 대하여 알아보도록 하겠습니다.

어쩌면 전역변수의 기능은 지역변수보다 중요할 수 있기 때문에 잘 알아두셔야 여러 곳에서 쓸 수 있을 겁니다.

그럼 지금부터 시작하도록 하겠습니다.

 

1. 전역변수란?

전역 변수는 지역 변수와는 다르게 함수의 몸에서 실행이 되는 것이 아닌, 함수의 외부에서 실행이 됩니다.

마치 우리가 사용자 지정 함수를 컴파일러가 인지를 할 수 있도록 전역적으로 먼저 함수 외부에서 선언을 하는 것과 같은 원리입니다.

그래서 전역 변수는 지역 변수와는 다르게 모든 함수에 접근이 가능하다는 특징을 가지고 있습니다.

제가 간단한 예제를 한 번 작성을 해보도록 하겠습니다.

#include <stdio.h>

int A, B;

int main()
{
    int ans;

    A = 4;
    B = 8;

    ans = add();

    printf("%d + %d = %d\n", A, B, ans);

    return 0;

}

int add()
{
    return A + B;
}

이렇게 간단한 덧셈 프로그램을 작성을 해봤습니다.

그리고 여기에서 전역 변수의 특징 중 하나는 개발자가 전역 변수의 초기값을 지정을 하지 않는다면 초기값은 자동으로 0으로 설정이 됩니다.

그리고 여기서 볼 수 있듯이 main() 함수와 add() 함수 둘 다 같은 변수를 사용하고, 똑같이 영향을 받음을 알 수 있습니다.

그게 어떤 걸 의미하는지 결과를 바로 보여드리도록 하겠습니다.

4 + 8 = 12

이렇게 결과가 나왔는데, 여기서 add() 함수가 리턴 값을 A + B로 받기로 되어있었기 때문에 전역 변수 A와 B를 더한 값을 리턴을 받은 겁니다.

 

1 - 1. 전역 변수의 생존 기간

전역 변수는 지역 변수와는 다르게 프로그램이 시작이 됨과 동시에 호출이 되고, 프로그램이 종료되기 전까지 모든 영역에서 접근이 가능하며, 프로그램이 종료가 될 때 같이 종료가 됩니다.

제가 또 다른 간단한 예시를 한 번 들어보도록 하겠습니다.

#include <stdio.h>

int cnt;

int main()
{
    printf("cnt = %d\n", cnt);

    return 0;
}

이렇게 작성을 했을 때 어떻게 결과가 나오는지 한 번 보겠습니다.

cnt = 0

이렇게 나옵니다.

제가 앞서 말씀드렸듯이, 개발자가 전역 변수의 값을 지정을 하지 않는다면 초기값이 0으로 지정이 되기 때문에 저렇게 나왔습니다.

반응형

 

2. 전역 변수의 사용

전역 변수를 사용을 하면 정말 편할 것 같다는 생각이 들지만,

실제로 개발을 하는 사람들은 잘 사용하지 않습니다.

그 이유는 전역 변수로 인하여 코드가 꼬이는 현상이 초래될 수 있기 때문입니다.

그 이유는 코드를 작성하고 실행을 했는데, 어떤 부분에서 오류가 났는지 찾아야 하는데,

전역 변수들로 인해서 그게 잘 보이지 않을 수 있기 때문입니다.

그래서 그렇게 전역 변수들로 인하여 소스들이 꼬이는 현상을 '스파게티 코드'라고 칭합니다.

그리고 이 글을 쓰는 저 역시도 전역 변수를 적극적으로 쓰기보다는 그냥 지역 변수들을 적극적으로 사용을 하는 것이 더 바람직하다고 말하고 싶습니다.

그래서 정리를 한다면 다음과 같습니다.

  • 거의 모든 함수에서 사용하는 공용 데이터(변수)가 존재하는 경우에는 전역 변수로 선언해도 무방함.
  • 일부의 함수만 사용하는 경우 지역변수로 선언을 하는 것이 바람직함.

 

2 - 1. 이름이 같은 전역 변수와 지역 변수

전역 변수와 지역 변수가 이름이 같다면 어떻게 될까요?
이럴 경우에는 지역 변수가 전역 변수보다 우선순위가 높기 때문에 지역 변수가 우위를 점하게 됩니다.

그러면 바로 제가 간단한 예제를 만들어서 한 번 보여드리도록 하겠습니다.

#include <stdio.h>

int sum = 1;

int main()
{
    int sum = 0;

    printf("sum = %d\n", sum);

    return 0;
}

 이렇게 전역 변수와 지역 변수의 이름이 같은 경우를 한 번 작성을 해봤는데,

한 번 결과를 바로 보도록 하겠습니다.

sum = 0

이렇게 지역 변수가 우선순위에서 우위를 점했기 때문에 지역 변수의 값이 나오는 것을 볼 수가 있습니다.

 

여기까지 지역 변수에 대하여 알아보았는데요,

다음 포스팅에서는 생존 시간에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자분들께 진심으로 감사드립니다 ~

반응형

댓글