티스토리 뷰

교훈 : 헤더 파일에 변수를 포함한 함수를 선언하는 이상한 코딩 습관을 고쳐야겠다.

해결법 : 왠만하면 헤더 파일에는 변수를 넣지 말고 함수와 매크로, 구조체 등을 정의하는 용도로 사용하고 꼭 넣어야 겠다면 extern을 반드시 명시해준다.


error LNK2001 오류는 코드 문법 자체의 문제는 없으나 링킹 과정에서 같은 코드가 여러번 정의되어 있기 때문에 발생하는 오류이다.

1
2
3
4
5
6
7
8
//temp.h
int abc;
 
//temp1.c
#include "temp.h"
 
//temp2.c
#include "temp.h"
cs


대충 위와 같은 코드가 있다고 정의하자. 헤더 파일에서 변수를 정의를 하는데 temp1.c와 temp2.c에서 둘 다 헤더를 호출하기 때문에 헤더 파일에서는 int abc가 2번 정의되는 사태가 발생하고 error LNK2001 오류를 출력해준다. 


해결 방법은 2가지가 있는데 하나는 헤더파일에서 변수를 뻬고 소스 파일에 변수를 넣어주는 방법이다. 하지만 2개의 소스 파일에서 같은 변수를 사용한다면 헤더에 어쩔 수 없이 정의하게 된다.


또 한 가지 방법은 헤더파일의 변수에 extern을 명시해서 외부에서 사용할 것이라고 미리 알려준 후, 소스에서 사용을 하겠다는 선언을 하고 사용하는 것이다.

1
2
3
4
5
6
7
8
9
10
11
12
//temp.h
extern int abc;
 
//temp1.c
#include "temp.h"
 
int abc;
 
//temp2.c
#include "temp.h"
 
int abc;
cs


열심히 삽질했더니 오늘도 또 하나의 코딩 방법을 배워간다.

'Programming > C' 카테고리의 다른 글

List Control 사용하기  (0) 2016.11.07
단일 환형 연결리스트 구현  (0) 2016.11.04
String 내부 알파벳 갯수 계산  (0) 2016.09.15
난수 자릿수별 빈도 계산기  (0) 2016.09.14
dumpcode.h  (0) 2016.07.05
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
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 28 29 30 31