본문 바로가기

IT/C|C++

[C] 외부 변수 참조, extern

이번 포스팅에서는 외부 파일에서 선언된 변수를 사용하는 extern에 대해서 알아보겠습니다.


1. extern


main.c가 있고 test.h, test.c 파일이 있다고 가정해봅시다.


만약에 test.c에 있는 변수 int c라는 데이터를 main.c에서 가져다가 사용하고 싶습니다.


이럴때 사용하는 것이 extern입니다.


예제를 먼저 봅시다.


1. Makefile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
VPATH=./
EXEC=main
OBJDIR=./
 
CC=gcc
 
CFLAGS=-Wall -Wfatal-errors
 
OBJ=test.o main.o
 
OBJS = $(addprefix $(OBJDIR), $(OBJ))
DEPS = $(wildcard ./*.h) Makefile
 
all: $(EXEC)
 
$(EXEC): $(OBJS)
    $(CC) $(COMMON) $(CFLAGS) $^ -o $@ $(LDFLAGS)
 
$(OBJDIR)%.o: %.c $(DEPS)
    $(CC) $(COMMON) $(CFLAGS) -c $< -o $@
 
.PHONY: clean
 
clean:
    rm -rf $(OBJS) $(EXEC)
 



2. main.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
 
#include "test.h"
 
extern int tt;
 
int main(void){
 
    printf("tt : %d\n", tt);
 
    return 0;
}
 




3. test.h


1
2
3
4
5
6
7
#ifndef TEST
#define TEST
 
void test(void);
 
#endif
 



4. test.c


1
2
3
4
5
6
7
8
9
10
#include "test.h"
 
#include <stdio.h>
 
int tt = 90;
 
void test(void){
    printf("Hello Test\n");
}
 
cs



5. 실행결과




실행결과가 다음과 같이 나온다면 예제실행에 성공하신겁니다.


test.c에 보시면 전역변수로 int tt가 90으로 초기화되어 선언되어있는 것을 확인할 수 있습니다.


해당 변수를 main.c에서 사용하고 싶다면 main.c에서 extern 키워드를 사용해서 extern int tt를 써주면 외부파일에 있는


int형 변수 tt를 사용하겠다는 의미가 됩니다.


따라서 이를 main함수 안에서 출력을 해보면 test.c에서 90으로 초기화한 변수의 값이 출력됨을 확인할 수 있습니다.