C언어에서 extern과 static의 사용법을 알아보자.
1. 전역 변수 앞에 쓰이는 extern 과 static
1) extern 전역 변수
<main.c 소스>
전역 변수를 선언만하고 나중에 사용할 때 값을 지정할 수 있다.
int global_var; void main() { global_var = 1; printf("%d \n", global_var); }아래처럼 사용하면 변수를 선언하면서 초기화를 동시에할 수 있다.
int global_var = 1; void main() { printf("%d \n", global_var);; }
이제 앞의 <main.c>에서 선언한 전역 변수를 다른 파일의 코드에서 사용하려면 아래와 같이 하면된다.
<sub.c 소스>
extern int global_val; int sub() { global_val = 1 printf("[sub]%d \n", global_var);; }
위의 <sub.c 소스>에서 extern int global_val;를 아래 코드 처럼 int global_val;로 선언해도 잘 동작한다.
int global_val; int sub() { global_val = 1 printf("[sub]%d \n", global_var);; }그 이유는 전역변수는 기본적으로 extern 이기 때문이다. 하지만 <main.c>나 <sub.c> 둘 중 어딘가에서는 반드시 int global_val; 로 정의되어야 한다. 즉, 모든 파일에서 extern int global_val; 처럼 extern 키워드를 쓰면 빌드 에러가 날 수 있다.
2) static 전역 변수
static 키워드를 전역 변수에 쓰면 그 전역 변수는 해당 파일안에서만 전역 변수로 동작한다. 즉 extern에 의하여 다른 파일에서는 이용할 수가 없다. 일반적으로 extern을 이용하여 다른 파일에서도 전역 변수에 접근하게 하기 보다는 static 키워드를 이용하여 한 파일에서만 전역 변수로 사용하고, 다른 파일에서는 별도의 함수를 이용하여 값을 변경하거나, 얻는 방법을 이용하는 것이 바람직하다.<main.c 소스>
void main() { int local_var = 1; printf("[before] Get = %d\n",getVariable()); printf("[before] Add Result = %d\n",sum(local_var)); setVariable(100); printf("[after] Get = %d\n",getVariable()); printf("[after] Add Result = %d\n",sum(local_var)); }<add.c 소스>
static int global_static = 1; int sum(int a) { return (a + global_static); } void setVariable(int a) { global_static = a; } int getVariable(void) { return global_static; }
'프로그래밍 > C/C++/C#' 카테고리의 다른 글
C언어에서 구조체 사용 시 주의 사항 (0) | 2014.05.03 |
---|---|
Makefile에서 -D로 정의하기 (0) | 2014.05.03 |
DLL과 LIB 차이점 설명 (0) | 2012.11.10 |
C/C++ 코딩시 main에 인자 넘기고 처리하는 방법 (0) | 2010.06.05 |
VC++을 이용한 Serial 통신 프로그램 만들기 [고급] (0) | 2009.12.25 |