我在项目中使用RunningMedian Arduino库。
在库头文件中,MEDIAN_MAX_SIZE预设为19。
#define MEDIAN_MAX_SIZE 19 // adjust if needed
我需要覆盖标题以生成MEDIAN_MAX_SIZE 30而不更改库文件,因此将来仍可以进行更新。
我的声明:
#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.
库代码不会创建大于MEDIAN_MAX_SIZE的缓冲区。
如何在不更改RunningMedian.h文件的情况下覆盖19 for 30并仍在其类中更改MEDIAN_MAX_SIZE大小?
答案 0 :(得分:1)
您可以#undef MEDIAN_MAX_SIZE
并重新定义它,如下所示:
#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
您可能希望在使用调整后的值完成后将其重新定义为原始值,以防其他内容依赖于原始值。
答案 1 :(得分:1)
Alex Zywicki's answer适用于重新定义宏无关紧要的情况。但是,为了安全起见或者如果您需要确保将宏定义回其先前的定义,您可以使用the push_macro
and pop_macro
pragmas(假设您的编译器支持它):
#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")
这允许您临时重新定义代码块的宏。
答案 2 :(得分:0)
我认为应该可以在项目中创建仅包含更改后的定义的新头文件(例如MyRunningMedian.h):
#ifndef MEDIAN_MAX_SIZE
#define MEDIAN_MAX_SIZE 30
#endif
然后,您需要将此头文件传递给预处理器,以将其作为RunningMedian的第一个#include包括在内。您可以使用-include指令来执行此操作,请参见https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html。
例如在PlatformIO中,您可以通过以下方式在platformio.ini中进行操作:
[common]
build_flags =
-include "include/MyRunningMedian.h"