Ich benutze Rapidjson, die eine all-Header-Bibliothek ist. In rapidjson.h
gibt es ein Makro RAPIDJSON_ASSERT
, in einer meiner CPP-Dateien, würde ich es neu zu definieren mag, so habe ich diesen Code an der Spitze meiner Datei:Kann eine Makroredefinition auf einzelne cpp-Datei angewendet werden?
#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")
Hier ist die whay dass rapidjson.h
definiert RAPIDJSON_ASSERT
:
#ifndef RAPIDJSON_ASSERT
#include <cassert>
#define RAPIDJSON_ASSERT(x) assert(x)
#endif // RAPIDJSON_ASSERT
In der Dokumentation, die die RAPIDJSON_ASSERT
Logik außer Kraft zu setzen, müssen Sie nur RAPIDJSON_ASSERT
definieren, bevor Sie eine der Dateien enthalten.
Das Problem ist, dass, wenn ich den Code im Debugger ausführen, RAPIDJSON_ASSERT
nicht neu definiert wird. Ich überprüft stdafx.h
für alles, was die Rapidjson Header-Dateien enthalten würde, und es gibt nichts.
Ich war unter der Annahme, dass jede Kompilierungseinheit durch die Header-Dateien laufen sollte.
Beachten Sie, dass wenn ich die Neudefinition des Makros in stdafx.h
verschiebe ich das Makro neu definiert, aber ich hatte gehofft, es pro Kompilierungseinheit zu tun.
mit neu zu definieren, haben Sie umfassen in stdafx.h rapidjson? – jaggedSpire
Das Muster scheint falsch zu sein. Möchten Sie das Makro innerhalb von rapidjson für diese Übersetzungseinheit oder einfach in Ihrer Übersetzungseinheit ändern? Wenn letzteres, setze das redefine nach den Rapidjson-Headern. Sonst könnte Rapidjson das Makro selbst einfach neu definieren. – KABoissonneault
@jaggedSpire - Ich habe rapidjson.h nicht in stdafx.h eingeschlossen, also bin ich mir nicht sicher, warum es das Makro nicht überschreibt. – bpeikes