Я использую Rapidjson, библиотеку всех заголовков. В 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.h
определяет RAPIDJSON_ASSERT
:
#ifndef RAPIDJSON_ASSERT
#include <cassert>
#define RAPIDJSON_ASSERT(x) assert(x)
#endif // RAPIDJSON_ASSERT
В документации указано, что для переопределения логики RAPIDJSON_ASSERT
вам просто нужно определить RAPIDJSON_ASSERT
перед включением любого из файлов.
Проблема в том, что когда я запускаю код в отладчике, RAPIDJSON_ASSERT
не переопределяется. Я проверил stdafx.h
на наличие чего-либо, что могло бы включать заголовочные файлы Rapidjson, и ничего не нашел.
Я исходил из того, что каждая единица компиляции должна проходить через заголовочные файлы.
Обратите внимание, что если я перенесу переопределение макроса в stdafx.h
, я получу переопределение макроса, но я надеялся, что смогу сделать это для каждой единицы компиляции.