헤더에서 #ifndef 전처리를 해줬음에도 중복 선언이 되는 문제
글쓴이: yann8166 / 작성시간: 금, 2013/11/15 - 11:46오전
만들어준 헤더에
#ifndef MAKE_DB
#define MAKE_DB
const char test[] = "abcd"'
(내용)
#endif
위와 같이 전처리기를 통해 헤더 내용을 감싸 주었습니다.
하지만 그럼에도 컴파일 시에 이 헤더를 include한 다른 위치에서
이미 test 상수를 선언 했다는 중복 에러가 출력이 됩니다.
static const char test[] = "abcd"와 같이 static을 주어야만 정상 컴파일이 됩니다.
무슨 이유일까요??
Forums:
전처리 결과를 한번 확인해 보는 것은 어떨까요?
컴파일전 전처리결과를 파일로 떨궈서 확인해 보는 것은 도움이 될까요?
http://www.dgkim.net/wordpress/2013/01/03/gcc로-몇가지-연습-c-s-e/
include는 그냥 복붙하는거랑 똑같습니다.
include는 그냥 복붙하는거랑 똑같습니다. 서로다른 소스파일에서 저 해더를 인클루드하면 각각에서 똑같은 이름의 전역변수가 선언되므로 충돌됩니다.
1. 선언과 정의는 다릅니다. 2. 중복 선언 에러는
1. 선언과 정의는 다릅니다.
2. 중복 선언 에러는 없습니다.. ( 타입을 다르게 선언하면 오류가 납니다만.. )
3. 헤더에는 선언만, 정의는 한 곳에서만 하시면 됩니다.
static을 붙이면..
해당 변수는 해당 소스파일(cpp등)에서만 사용이 가능하므로 에러가 사라지는 것입니다.
개인적으로는 헤더파일에서 변수를 선언하는 걸 가급적 피하고 있습니다. 저 경우에는 #define을 이용했다면 아무 문제가 없겠죠.
--
댓글 달기