헤더 파일 순서?
글쓴이: cartman / 작성시간: 화, 2003/07/29 - 9:43오전
프로그램을 짜다 보면 가끔 황당한 일을 접할 때가 있습니다.
분명히 제대로 짠 것 같은데 "reference 어쩌구 저쩌구" 하면서 link 에러가 나고,
그것 때문에 이리 저리 고생하다가 결국은 헤더 파일을 include하는 순서를 바꾸니까 해결 되더군요.
어디서도 헤더 파일을 include하는 순서가 프로그램의 실행에 영향을 미친다는 이야기는 못 들었었는데,
혹시 비슷한 일을 겪으신 분은 안 계신가요?
그리고 원인이 뭐였는지도 알 수 있을까요?
Forums:
저도 여러 번 헤더 파일 순서때문에 애먹었던 적이 있습니다.제 경우는
저도 여러 번 헤더 파일 순서때문에 애먹었던 적이 있습니다.
제 경우는 헤더파일에서 쓰인 매크로와 #ifdef ... 같은 놈들 때문이었습니다.
a.h 에 b 가 선언되었을 때, b.h 에서 b가 선언되는 부분을 건너뛰는데, 하필이면 a.h에 선언안된 내용이 포함되어 있었고, 또 하필이면 소스에서는 그 부분을 이용하려 한다...... 뭐 이런 경우가 아니었을까 합니다. :-)
a.h
#ifndef b
#define b
void funcb(arg1, arg2, ...)
#endif
b.h
#ifndef b
#define b
void funcb(arg1, arg2, ...)
void funcc(arg1, arg2, ...)
#endif
이런 식이면, a.h 인클루드 한 다음 b.h를 인클루드하면 funcc 는 선언되지 않죠. 뭐, c 컴파일러라면 어지간하면 선언안 된 함수도 링크가 가능한데, c++ 컴파일러는 링크 에러를 내뿜지요.
아니면, 선언된 매크로중에서 먼저 선언된 헤더 파일에는 별 문제 없지만 나중에 선언된 헤더 파일의 매크로에는 뭔가 특별한 함수를 호출한다던가...... 물론, 매크로 이름이 동일하고, 위와 같은 식으로 처리되었다면 .....
여하튼, 제 경우는 이런 경우가 주로 있었습니다.
근데, 대부분 문제된 헤더 파일들은 회사에서 개발된 소스코드의 헤더파일들 이었다는... ;;
보통...[quote]"the most specific to the
보통...
의 순으로 헤더파일을 인클루드 한다고 책에서 보았습니다.
그러니까...
이런 순서로...
그냥 참고삼아 적어보았습니다. ^^;
댓글 달기