나는 모든 헤더 라이브러리 인 rapidjson을 사용하고 있습니다. rapidjson.h
에서, 거기에 내가 다시 정의하고 싶습니다 내 CPP 파일 중 하나에, 매크로 RAPIDJSON_ASSERT
, 그래서 내 파일의 맨 위에있는이 코드가 다음 whay는 rapidjson.h
가 RAPIDJSON_ASSERT
을 정의하는 다음단일 cpp 파일에 매크로 재정의를 적용 할 수 있습니까?
#include "stdafx.h" // for windows
#pragma push_macro("RAPIDJSON_ASSERT")
#define RAPIDJSON_ASSERT(x) if(!(x)) throw std::logic_error("rapidjson exception");
#include "rapidjson/rapidjson.h"
#include "rapidjson/document.h"
#include "rapidjson/stringbuffer.h"
#include "rapidjson/writer.h"
....
....
#pragma pop_macro("RAPIDJSON_ASSERT")
입니다 다음 RAPIDJSON_ASSERT
논리를 무시하는
#ifndef RAPIDJSON_ASSERT
#include <cassert>
#define RAPIDJSON_ASSERT(x) assert(x)
#endif // RAPIDJSON_ASSERT
문서 상태는, 당신은 당신이 어떤 파일을 포함하기 전에 RAPIDJSON_ASSERT
을 정의해야합니다.
디버거에서 코드를 실행하면 RAPIDJSON_ASSERT
이 재정의되지 않는 것이 문제입니다. 나는 rapidjson 헤더 파일을 포함 할만한 무엇이든을 위해 stdafx.h
을 점검했고, 아무것도 없다.
각 컴파일 단위가 헤더 파일을 통해 실행되어야한다는 가정하에있었습니다.
매크로의 재정의를 stdafx.h
으로 옮기면 매크로가 재정의 되겠지만 컴파일 단위별로 처리 할 수 있기를 바랬습니다. 그렇게, 당신이이 정의 된 장소 후 #DEFINE을 추가해야하는 경우
rapidjson 코드 자체에 대한 RAPIDJSON_ASSERT의 정의를 변경하려면 같은
는 당신이 STDAFX.H에서 rapidjson 포함 할 사용하여 라이브러리의 일을 재정의 할 수있는 좋은 일이 아니라고? – jaggedSpire
패턴이 잘못되었습니다. 이 번역 단위의 rapidjson 내부 또는 단순히 번역 단위 내부의 매크로를 변경 하시겠습니까? 후자의 경우, rapidjson 헤더 다음에 다시 정의하십시오. 그렇지 않으면 rapidjson이 단순히 매크로 자체를 다시 정의 할 수 있습니다. – KABoissonneault
@jaggedSpire - stdafx.h에 rapidjson.h를 포함하지 않았으므로 매크로를 재정의하지 않는 이유는 확실하지 않습니다. – bpeikes