#define define_msg 은 define_msg를 정의한다고 전처리기에게 알리는 것이다.
#ifndef define_msg 은 전처리기에게 define_msg가 정의안되어 있다면,  #endif 까지 "코드 인스턴스화" 하라는 뜻이다.
#endif 는 #if??? 에서 여기까지 끝난 다는 뜻이다.

#ifndef 와 #endif 는, 코드를 인스턴스화 할지 안할지를 결정하는데 많이 쓰이는데, 어제 이것 때문에 고생 꽤나 했었다. 다른곳에서 define 정의되어 있는지도 모르고, 다른 곳에서 버그를 고치려 했으니, "종로에서 뺨맞고 한강가서 화풀이 한다."를 한 꼴이다.


이 문제를 해결하기 위해서, 예전에 공부했다가, 어떤 사람이 했던 한가지 대안이 떠올랐다.

바로 파일 이름명을 이용하여, #define 을 해 두는것인데, __filename_h__ 으로 정의하고, 만약 파일이 같은게 있다면, 네임스페이스나 클래스의 이름을 끼어 넣어 보완하는 것이다.

..

만약 odbc.h 파일이 있고, loost namespace 가 있는 곳이라면, #define __loost_odbc_h__  으로 정의해 두는 것이다.

앞과 뒤에 __ 가 되어 있는데, 이것은 컴파일러가 쓰지 않는 것이니 괜찮다고 한다.


.. .. 두서 없이 정리해봤다.

요지는, 제목 그대로 조심해야 한다는 뜻, 대안은 스스로 찾아야 한다.


신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요