• 2022. 5. 1.

    by. 데브촙

    반응형

    소스 파일을 분리할 때 발생하는 오류

    소스 코드가 길어져 연관이 깊은 함수끼리 묶어 파일을 나누어 관리하면 변경된 부분이 있는 소스코드만 다시 컴파일할 수 있어 편리

    소스 코드를 분리할 때 나뉘어진 두 함수에서 동일한 전역 변수를 사용하는 경우 한쪽에서 전역 변수를 참조하지 못해 오류 발생

     

    extern 키워드

    // Sum.c
    int result = 0;
    void Sum(int data1, int data2)
    {
    	result = data1 + data2; 
    }
    
    
    // Main.c
    #include <stdio.h>
    void Sum(int, int);
    extern int result; // 전역변수로 선언되어있는 것을 참조하는 extern 예약어
    
    void main()
    {
    	Sum(5, 3);
    	printf(“5+3 = %d\n”,result);  // 전역 변수는 초기화된 구간이 없어서 0이 출력
    }

     

    extern 키워드를 사용할 때 주의할 점

    // 한 프로젝트 내에 2개의 c파일 존재한다고 가정
    // A.c
    
    int g_data1= 0;
    int g_data2= 0;
    int g_data3= 0;
    
    // B.c
    int g_data1;	// A.c 파일에 같은 이름의 g_data1 전역변수가 있어 링크 오류 발생
    extern int g_data2; // A.c 파일에 선언된 g_data2 전역 변수를 정상적으로 extern 참조
    extern int g_data3 = 0; // A.c 파일에 있는 g_data3와 중복되었다고 오류.
    extern int g_data4; // A.c 파일에 선언되지 않은 전역 변수를 extern 참조했으므로 오류 발생
    extern int g_data5 = 0; // 선언되지 않은 변수가 extern 참조에서 초기화를 사용했으므로, 일반 전역변수로 처리

     

    반응형

    'C' 카테고리의 다른 글

    static 키워드  (0) 2022.05.01
    지역변수와 전역변수  (0) 2022.04.30
    비트 연산자(AND, OR, XOR, NOT)  (0) 2022.04.29