Programming Tools/TCPL C Language

[C Language] External Variables, Automatic Variable (전역변수, 자동변수, 지역변수)

LiDARian 2021. 6. 22. 18:10
반응형

C언어에서는 변수를 external과 internal로 구분할 수 있다.

 

External variable(전역변수)은 모든 함수의 밖에서 선언되고, 모든 함수들에서 접근 가능하다.
반면 internal variable 혹은 automatic variable(지역변수)은 함수 내부, scope 안에서 선언된다.


지역 변수는 선언된 함수 안에서만 사용할 수 있고(더 정확히는 해당 scope 내) 다른 함수에서는 사용할 수 없다. 즉 함 수안에 종속되어 존재한다. 함수밖에서는 존재하지 않는 것으로 취급한다.
이렇듯 C 언어는 범위에 따라 변수의 접근을 제한한다.

#include <stdio.h>

int main()
{
    {
        int num1 = 10;       // 블록 안에 변수를 선언
    }

    printf("%d\n", num1);    // 컴파일 에러. 블록 바깥에서는 num1을 사용할 수 없음

    return 0;
}

코드 출처 : 코딩도장


main내에 있는 또다른 scope에 num1이 정의되므로, 컴파일 에러가 발생한다.

전역변수의 경우 모든 함수의 밖에서 선언하면 된다.

#include <stdio.h>

int num1 = 10;    // 전역 변수 선언 및 값 초기화

void printGlobal()
{
    printf("%d\n", num1);    // 20: main 함수에서 저장한 값이 계속 유지됨
}

int main()
{
    printf("%d\n", num1);    // 10: main 함수에서 전역 변수 num1의 값 출력

    num1 = 20;    // 전역 변수 num1에 20 저장

    printGlobal();    // 20: printGlobal 함수에서 전역 변수 num1의 값 출력

    return 0;
}

코드 출처 : 코딩도장

 

모든 Function은 external하다. C언어는 main이나 다른 함수 안에서 또 다른 함수를 정의하는 것을 용납하지 않는다.


external variable은 모든 함수에서 접근이 가능하고 또 반환값으로 사용 가능하기에, 두개 이상의 함수끼리 공유하여 사용하여 서로 data communication을 할 수 있다. 이 경우에는 external variable을 사용하는 것이 argument를 통해 서로 데이터를 교환하는 것보다 낫다.


컴퓨터 프로그래밍에서 자동 변수(automatic variable)는 자동으로 할당, 해제되는 변수를 의미한다.
C언어에서 자동 변수에 해당하는 변수는 지역 변수 뿐이다. 그래서 C언어에서는 internal variable과 automatic variable이 같은 의미이다.

초기화되지 않은 자동 변수에는 변수 자료형의 유효한 값이 할당될 때까지 미정의된 값으로 존재한다.


참고

https://www.letmecompile.com/c-auto-static-extern-%ED%82%A4%EC%9B%8C%EB%93%9C-%EC%9D%98%EB%AF%B8/

반응형