• 2022. 5. 1.

    by. 데브촙

    반응형

    특정 소스 파일에서만 전역변수 사용하기

    전역 변수의 사용 범위를 변수가 선언된 소스파일로 제한

    다른 소스 파일에서 extern 키워드로 참조 불가

    같은 이름의 전역 변수를 다른 소스 파일에서 선언해도 오류 발생 안함

    // 한 프로젝트 내에 2개의 c파일 존재한다고 가정
    // A.c
    int g_data1= 0;
    static int g_data2= 0;
    static int g_data3= 0;
    // B.c
    int g_data1; // A.c 파일에 같은 이름의 g_data1 전역변수가 있어 링크 오류 발생
    int g_data2; // A.c 파일의 g_data2 와 B.c 파일의 g_data2는 별개의 전역 변수가 됨
    extern int g_data3; // g_data3은 static으로 선언된 전역 변수라서 extern 참조할 수 없어서 에러 발생

     

    특정 함수에서만 전역 변수 사용하기

    전역 변수를 특정 함수 안에서만 사용하도록 제한

    static 키워드를 사용한 함수의 지역 변수들은 지역 변수의 특성을 가지지만, 생명 주기는 전역 변수와 동일

    //지역 변수를 사용한 경우
    #include <stdio.h>
    void Test()
    {
    int data = 0;
    printf(“%d, ”, data++);
    }
    void main()
    {
    int i;
    for(i=0; i<5; I++) Test();
    // 지역 변수를 사용해서 출력 결과는 0,0,0,0,0, 이 됨
    }
    // static + 지역 변수를 사용한 경우
    #include <stdio.h>
    void Test()
    {
    static int data = 0; // Test 함수 안에서 사용가능한 전역변수
    printf(“%d, ”, data++);
    }
    void main()
    {
    int i;
    for(i=0; i<5; I++) Test();
    // 지역 변수를 사용해서 출력 결과는 0,1,2,3,4, 가 됨
    }

     

    const 키워드

    constconstant의 약자

    변수를 상수처럼 값을 변경하지 않고 쓰고 싶을 때 사용

    프로그래머의 실수 방지를 위한 문법(기계어 번역에서 큰 지장없는 문법임)

    값을 변경하지 말아야 하는 변수를 변경하는 경우에 문법적으로 에러를 발생시킴

    // GetArea 함수의 첫 번째 인자 pi값은 절대 변경하지 말 것
    double GetArea(const double pi, double radius, int limit)
    {
    double result;
    pi = 3.14; // 사용자가 임의로 바꾸면 안되는 부분이므로 오류 발생시킴
    result = pi * radius * radius;
    return result;
    }

     

    반응형

    'C' 카테고리의 다른 글