## C 언어 외부(extern) 변수

 

C 언어에서 외부 변수(external variable)란 여러 개의 소스 파일이 존재할 때, 각 소스 파일이 가지고 있는 변수 중에서 다른 소스 파일에서도 접근 가능한 변수를 의미합니다.

 

C 언어에서는 다른 소스 파일에서 선언한 변수를 다른 소스 파일에서 사용하기 위해 extern 키워드를 사용합니다. extern 키워드로 변수를 선언하면 해당 변수는 외부 변수로 선언되며, 다른 소스 파일에서도 해당 변수를 사용할 수 있게 됩니다.

 

외부 변수는 전역 변수(global variable)와 지역 정적 변수(local static variable)로 나눌 수 있습니다. 전역 변수는 함수 밖에서 선언된 변수이며, 프로그램이 시작될 때부터 종료될 때까지 메모리에 상주하며, 모든 함수에서 접근 가능합니다. 지역 정적 변수는 함수 안에서 static으로 선언된 변수로서, 해당 함수가 호출될 때 생성되어 프로그램이 종료될 때까지 메모리에 상주하며, 함수 안에서만 접근 가능합니다.

 

외부 변수는 여러 개의 소스 파일에서 공유할 수 있는 변수이기 때문에, 프로그램이 커질수록 프로그램의 구조와 관리가 어려워지는 단점이 있습니다. 따라서 외부 변수의 사용은 가능한 지양해야 합니다.

 

다음은 C 언어에서 외부 변수를 사용하는 간단한 데모 예제입니다.

 

***코드: external_variable.c***

#include <stdio.h>



int count = 0; // 전역 변수(외부 변수) 선언



void increment() {

    extern int count; // 전역 변수 선언

    count++; // 전역 변수 값 증가

}



int main() {

    printf("count = %d\n", count); // 초기값 출력

    increment(); // 함수 호출

    printf("count = %d\n", count); // 변경된 값 출력



    return 0;

}

 

```output

count = 0

count = 1

```

 

위 예제에서 count는 전역 변수(외부 변수)로 선언되어 있습니다. increment() 함수는 count 값을 증가시키는 기능을 가지고 있습니다. main() 함수에서는 count 초기값과 increment() 함수 호출 후의 count 값을 출력하고 있습니다.

 

increment() 함수에서 extern 키워드를 사용하여 전역 변수 count를 참조하고 있습니다. 이를 통해 외부 변수에 접근할 수 있습니다. 만약 extern 키워드를 사용하지 않았다면, increment() 함수 내에서 새로운 지역 변수를 생성하게 됩니다. 따라서 전역 변수 값이 변하지 않게 됩니다.

 

다음 2개의 C 언어 코드를 분석 후 블로그 아티클로 작성하세요.

 

## 여러 파일에서 extern 변수 사용하기

 

C 언어에서는 extern 키워드를 사용해 외부 파일에서 선언된 변수를 다른 파일에서 사용할 수 있습니다. 이를 통해 모듈성과 재사용성을 높이는 것이 가능합니다.

 

다음은 서로 다른 두 파일에서 extern 변수를 사용하는 예제입니다.

 

먼저, 기억클래스_외부변수.c 파일에서 x, y 라는 변수를 전역 변수로 선언하고, sb1(), sb2() 함수에서 이 변수를 사용하고 있습니다.

 

***코드: 기억클래스_외부변수.c***

/*

	9.1.4. 예제. 외부 변수(Extern) 사용 : 기억클래스_외부변수.c

*/

#include <stdio.h>



int x, y;



sb1()

{

	printf("서브 1 : x = %d\n", x++);

}



sb2()

{

	printf("서브 2 : x = %d\n", y++);

}



main()

{

	x = 10;

	y = 20;

	sb1();

	sb2();

	sb3();

	sb4();

}

 

다음으로, 기억클래스_외부변수2.c 파일에서는 sb3(), sb4() 함수를 선언하고 있습니다. sb3() 함수에서는 extern 키워드를 사용하여 x, y 변수를 외부 변수로 선언하고 있습니다. 그리고 sb4() 함수에서는 x, y 변수를 새로 선언하고 있습니다.

 

***코드: 기억클래스_외부변수2.c*** 

sb3()

{

	extern int x, y;	//기억클래스_외부변수.c의 변수 사용

	printf("서브 3 : x = %d, y = %d\n", x, y);

}



sb4()

{

	int x = 100, y = 200;

	printf("서브 4 : x = %d, y = %d\n", x, y);

}

 

이제 이 두 파일을 컴파일하면 sb3() 함수에서는 외부 변수를 참조하여 값을 출력하고, sb4() 함수에서는 새로 선언된 지역 변수를 참조하여 값을 출력합니다.

 

```output

서브 1 : x = 10

서브 2 : x = 20

서브 3 : x = 11, y = 21

서브 4 : x = 100, y = 200

```

 

위 예제를 통해 extern 키워드를 이용하여 여러 파일에서 변수를 공유할 수 있음을 알 수 있습니다.

 

Comments


Comments are closed