【发布时间】:2020-05-15 06:28:28
【问题描述】:
我需要在设计时(预处理器)进行宏变量检查,更具体地说,该数字适合 24 位。 该宏打算在 if() 语句中使用,所以我不知道如何测试它。
这是一个 ARM systick 计时器(24 位),很多时候我都忘记了#define 正确的值,尤其是在更改 MCU 时钟时,当然,我的 if() 从未触发,这个愚蠢的错误很难调试.
所以在这个例子中,有一个技巧可以在 PARAMETER > 24 bits 时强制 gcc 出错?
#define PARAMETER 20000000 // over 24 bits, should throw a error at design time
#define MyMacro(var, par) (var > par)
uint32_t variable;
if(MyMacro(variable,PARAMETER))
{
// do something
// do something WRONG because PARAMETER > 24 bits
// Actually this is working as expected, test for < is valid because
// _Static_assert() is check for TRUE condition
// But I am still trying to find a way to combine this in original macro
_Static_assert(PARAMETER < 0xFFFFFF, "Ooopss... ERROR");
}
提前致谢!
【问题讨论】:
-
所以你想要一个编译错误以防这个值太大?
-
确切地说,我正在尝试使用 _Static_assert() 但到目前为止没有运气:)
-
我不明白,如果
MyMacro是一个函数,你会怎么写这个函数? -
查看我的回答,如果有帮助请告诉我
-
哦,不幸的是,编译时变量的值是未知的..