2014-07-18 2 views
6

VS에서 메모리 누수 탐지 메커니즘을 살펴봄으로써 질문이 떠 올랐습니다.매크로를 정의하는 매크로를 정의 할 수 있습니까?

#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 

하지만이 코드를 교체 DETECT_MLEAKS로 :이 다음 상용구 코드가 필요합니다

#define DETECT_MLEAKS\ 
#define _CRTDBG_MAP_ALLOC\ 
#include <stdlib.h>\ 
#include <crtdbg.h>\ 

는 할 수 없습니다.

해결 방법이 있습니까?

+8

그 라인 (및 포함 가드)을 detect_memleaks.h에 넣고 대신 #include "detect_memleaks.h"를 호출 할 수 있습니다. .. – slazyk

답변

4

표준 C 언어에서 매크로는 사전 처리 지시문을 생성 할 수 없습니다. 1,999 표준 : 9899는 ISO에서 예를 들어

6.10.3.4는 재검사하고 상기 리 교체 완전히 매크로 대체 토큰 시퀀스를 전처리로서 을

[...]

처리되지 얻어진

(이 경우에도 "하나와 유사하더라도"발언은 완전히 불필요합니다. 물론 구문이 ap로 처리되지 않기 때문입니다. 재 처리 지시가있는 경우 아니요,과 닮았습니다! 그러나이 단어는 수년간 마음 속에 머물러 있습니다. 방금 문서의 문자열을 "유사하게 검색"함으로써 견적의 섹션을 찾았습니다.)

6
//#define DETECT_MLEAKS //Uncomment to detect mem-leaks 
#ifdef DETECT_MLEAKS 
#define _CRTDBG_MAP_ALLOC 
#include <stdlib.h> 
#include <crtdbg.h> 
#endif 

내가 일반적으로 그런 일을하는 방법입니다.

관련 문제