#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__  으로 정의해 두는 것이다.

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


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

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


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기