연구실/파편화된 기록들
#ifndef, #define, #endif 사용시 주의 해야 한다.
최익필
2009. 1. 4. 20:59
#define define_msg 은 define_msg를 정의한다고 전처리기에게 알리는 것이다.
#ifndef define_msg 은 전처리기에게 define_msg가 정의안되어 있다면, #endif 까지 "코드 인스턴스화" 하라는 뜻이다.
#endif 는 #if??? 에서 여기까지 끝난 다는 뜻이다.
#ifndef define_msg 은 전처리기에게 define_msg가 정의안되어 있다면, #endif 까지 "코드 인스턴스화" 하라는 뜻이다.
#endif 는 #if??? 에서 여기까지 끝난 다는 뜻이다.
#ifndef 와 #endif 는, 코드를 인스턴스화 할지 안할지를 결정하는데 많이 쓰이는데, 어제 이것 때문에 고생 꽤나 했었다. 다른곳에서 define 정의되어 있는지도 모르고, 다른 곳에서 버그를 고치려 했으니, "종로에서 뺨맞고 한강가서 화풀이 한다."를 한 꼴이다.
이 문제를 해결하기 위해서, 예전에 공부했다가, 어떤 사람이 했던 한가지 대안이 떠올랐다.
바로 파일 이름명을 이용하여, #define 을 해 두는것인데, __filename_h__ 으로 정의하고, 만약 파일이 같은게 있다면, 네임스페이스나 클래스의 이름을 끼어 넣어 보완하는 것이다.
..
만약 odbc.h 파일이 있고, loost namespace 가 있는 곳이라면, #define __loost_odbc_h__ 으로 정의해 두는 것이다.
앞과 뒤에 __ 가 되어 있는데, 이것은 컴파일러가 쓰지 않는 것이니 괜찮다고 한다.
.. .. 두서 없이 정리해봤다.
요지는, 제목 그대로 조심해야 한다는 뜻, 대안은 스스로 찾아야 한다.