본문 바로가기

C언어/C언어 문법

[C언어] 지역변수, 전역변수

728x90
반응형

지역변수

 

지역변수는 정해진 영역에서만 사용 가능한 번수이다.

 

여기서 말하는 정해진 영역이란 중괄호에 의해 형성되는 영역을 의미한다.

 

 

 

예를 들어서 test라는 함수를 선언하고 그 안에서 변수를 하나 선언했다고 하자.

 

그러면 그 변수는 test 함수안에서만 사용 가능할 뿐 다른 함수에서는 사용이 불가능하다.

 

 

 

#include <stdio.h>

void test (int num)
{
    int tes = 4;
    printf("%d\n", tes*num);
}

int main ()
{
    test(10);
    printf("%d", tes*15);
    return 0;
}
 
 

따라서 위 코드에서 tes 변수는 test 함수에서 선언된 변수이기 때문에 main 함수에서는 사용할 수가 없다.

 

그러나 test 함수에서 선언된 변수는 test 함수가 끝난 후 사라지기 때문에 다시 tes 변수를 선언해 준다면

다른 함수에서도 사용할 수 있다.

 

 

그러므로 위 코드를 다음과 같이 바꾸면 에러가 발생하지 않는다.

 

#include <stdio.h>

void test (int num)
{
    int tes = 4;
    printf("%d\n", tes*num);
}

int main ()
{
    int tes = 6;
    test(10);
    printf("%d", tes*15);
    return 0;
}

 

 

그러나 같은 이름의 변수를 다른 의미로 사용하는 것은 혼선이 발생할 수 있기 때문에 피하는 것이 좋다.

 

 

 

반복문, 조건문 등에서도 중괄호를 사용하여 영역을 만들기 때문에 지역변수를 만들 수 있다.

 

반복문, 조건문에서 선언된 지역변수도 마찬가지로 해당 반복문, 조건문을 벗어나면 사용이 불가능하다.

 

#include <stdio.h>

int main ()
{
    int a;
    for (a=0;a<5;a++)
    {
        int b = 0;
        printf("%d\n", b);
    }
    printf("%d사용불가능", b);
    return 0;
}
 

따라서 위 코드에서 변수 b 도 for 문을 벗어나면 사용이 불가능하다.

 

 

 

 

지역변수

 

전역변수는 프로그램의 시작과 동시에 메모리에 할당되며 종료 시까지 존재하고 어디서든 접근이 가능하다.

 

#include <stdio.h>
int num;

int main ()
{
    printf("%d", num);
    return 0;
}
 

전역변수를 선언하는 방법은 위 코드에서 볼 수 있듯이 중괄호에 포함되지 않은 영역에서 선언해 주는 것이다.

 

전역변수는 초기화하지 않더라도 0으로 초기화된다. 이 사실은 위 코드를 통해서도 확인할 수 있다.

 

 

 

 

 

 

 

 

 

전역변수와 지역변수

 

전역변수와 같은 이름의 지역변수를 선언하게 되면 전역변수는 해당 지역에서 사용이 불가능하게 된다.

 

그러나 위에서도 말했다시피 같은 이름의 변수를 다른 의미로 사용하는 것은 혼선이 발생할 수 있기때문에 피하는 것이 좋다.

 

이럴 때 전역변수는 어디에서든지 사용이 가능하기 때문에 지역변수보다 편리할 수 있다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형