#define define_msg 은 define_msg를 정의한다고 전처리기에게 알리는 것이다. #ifndef define_msg 은 전처리기에게 define_msg가 정의안되어 있다면, #endif 까지 "코드 인스턴스화" 하라는 뜻이다. #endif 는 #if??? 에서 여기까지 끝난 다는 뜻이다. #ifndef 와 #endif 는, 코드를 인스턴스화 할지 안할지를 결정하는데 많이 쓰이는데, 어제 이것 때문에 고생 꽤나 했었다. 다른곳에서 define 정의되어 있는지도 모르고, 다른 곳에서 버그를 고치려 했으니, "종로에서 뺨맞고 한강가서 화풀이 한다."를 한 꼴이다. 이 문제를 해결하기 위해서, 예전에 공부했다가, 어떤 사람이 했던 한가지 대안이 떠올랐다. 바로 파일 이름명을 이용하여, #defi..
#define 검색 결과
부재 : 가급적 선행 처리자보다 컴파일러를 더 가까이 하자. 이유 1. 컴파일러는 #define을 알아차리지 못하기 때문에, 디버그가 힘들어지기 때문이다. 주의점 1. const로 상수화 시킬때 포인터라면 데이터와 포인터 역시 막아야 한다. - const char * const authorname = "Scott Meyers"; 2. 클래스 상수 멤버상수는 static const int a = 5; 로 사용 하면 좋다. 3. 클래스를 컴파일 도중 클래스 상수(클래스에서만 쓰일) 값이 필요하다면 enum을 사용 하는게 좋다. - enum에 대한 참조자를 갖지 못한다. - 메모리를 사용하지 않는다. 4. #define 함수는 잦은 버그가 있기 때문에 inline함수를 하면 더 좋다. 이것만은 잊지 말자! 1..
이유 1. #define은 전처리기에서 작업하기 때문에 컴파일러가 모르게 된다. 2. 1번의 사항으로 이식성이 떨어지게 된다. 3. 1번의 사항으로 다른 파일의 헤더파일로 들어가면, 이것으로 인한 디버깅이 어려워진다. 4. 매크로함수의 버그 찾기가 어려워진다. 해결방법 변수 하나 더 주고, const를 사용 해라. 해결방법의 주의점 두가지 1. 상수 포인터를 정의할 때, - const char* const authorName = "Scoot Meyers"; 식으로 어떤 변경도 못하게 해라. 2. 클래스 범위안에서의 상수일때 - static const int NUM_TURNS=5; // 클래스 내부 private에다가 선언 이렇게 하면, 클래스의 전역구역(?)에 1개만 올라가서 클래스 내부에서만 접근 가능..
최근댓글