2017-02-10 17 views
1

Ich verwende RunningMedian Arduino Bibliothek in einem Projekt.Wie überschreiben # define in Arduino Bibliothek Header

In der Bibliothek Header-Datei wird die MEDIAN_MAX_SIZE bis 19 voreingestellt

 #define MEDIAN_MAX_SIZE  19 // adjust if needed 

ich den Header außer Kraft setzen muß MEDIAN_MAX_SIZE 30 ohne Änderung der Bibliotheksdateien so Updates kann nach wie vor in der Zukunft machen getan werden.

Mein declatations:

 #define RunningMedian::MEDIAN_MAX_SIZE 30  // library over ride ?? 
    #define ACTIVE_MAX 30 // max active buffer size 
    RunningMedian ActiveSamples(ACTIVE_MAX); // FIFO readings 

    This will not compile. 

Die Codebibliothek wird ein Puffer von mehr als MEDIAN_MAX_SIZE nicht erstellen.

Wie kann ich die 19 für 30 überschreiben, ohne die RunningMedian.h-Datei zu ändern und immer noch MEDIAN_MAX_SIZE Größe in seiner Klasse zu ändern?

+0

Ändern Sie es in * RunningMedian.h *, wenn * RunningMedian.cpp * separat in eine Objektdatei kompiliert wird, wird es Ihre Neudefinition nicht sehen, wenn Sie es woanders platzieren. –

Antwort

0

Sie können #undef MEDIAN_MAX_SIZE und neu definieren, wie folgt aus:

#ifdef MEDIAN_MAX_SIZE //if the macro MEDIAN_MAX_SIZE is defined 
#undef MEDIAN_MAX_SIZE //un-define it 
#define MEDIAN_MAX_SIZE 30//redefine it with the new value 
#endif 

Vielleicht möchten Sie es auf den ursprünglichen Wert neu zu definieren, nachdem Sie es mit Ihren eingestellten Wert nicht mehr verwenden, hängt nur für den Fall etwas anderes auf dieser Wert ist das Original.

+1

@ user1213320 Vielleicht ist es erwähnenswert, dass dieser Code direkt nach der ersten Definition angezeigt werden muss, andernfalls kann der alte Wert * an einer anderen Stelle verwendet werden, bevor er neu definiert wird. *z.B. RunningMedian.cpp kann separat kompiliert werden, bevor die Header-Datei, die die Neudefinition enthält, jemals enthalten ist. Daher werden die alten Werte verwendet. * –

0

Alex Zywicki's answer ist perfekt für Fälle, in denen es keine Rolle spielt, wenn Sie das Makro neu definieren. Aber um sicher zu sein, oder wenn Sie das Makro sicherstellen müssen, um wieder auf seine früheren Definition definiert wird, können Sie verwenden the push_macro and pop_macro pragmas (vorausgesetzt, Ihr Compiler unterstützt):

#ifdef MEDIAN_MAX_SIZE 
#pragma push_macro("MEDIAN_MAX_SIZE") 
#define MEDIAN_MAX_SIZE 30 

// Use the modified value for MEDIAN_MAX_SIZE here 

#pragma pop_macro("MEDIAN_MAX_SIZE") 

Dies erlaubt Ihnen, vorübergehend neu definieren Makros für einen Block von Code.