在 c 中搜索定义的高级方法
Advance way to search for define in c
/* UART HEADER */
#define featureA 0xA0
#define featureB 0xB0
#define featureC 0x20
-
-
-
- // increment on feature, value of feature are random
-
-
#define featureZ 0x??
#define CHECK_CHAR(x) ((x==featureA)||(x==featureB)||(x==featureC) ------- (x==featureZ)? TRUE: FALSE)
大家好,我得到了一组UART header 来指示命令的用途。所以每次我使用宏检查 header ,但我意识到当命令不断增加并且宏长度也不断增加时,它使代码非常混乱。当功能越来越多时,我正在寻找一种机制来处理这种检查。
假设您的值遵循上面的简单模式,这将有效:
#define CHECK_CHAR(x) ( ((x)&0xf) == 0 && (x) >= featureA && (x) < featureInvalid )
您将 featureInvalid
定义为 featureZ
之后的下一个逻辑值。
由于这似乎是一次 运行 时间检查,您可以通过使用查找 table 来显着加快程序速度。它还将使代码更具可读性。假设你可以腾出 256 字节的 flash 并且所有代码都是唯一的,那么:
bool CHECK_CHAR (uint8_t ch)
{
const bool LOOKUP [256] =
{
[featureA] = true,
[featureB] = true,
[featureC] = true,
};
return LOOKUP[ch];
}
第二个最佳选择是 uint8_t
常量的排序数组 + 二进制搜索。
/* UART HEADER */
#define featureA 0xA0
#define featureB 0xB0
#define featureC 0x20
-
-
-
- // increment on feature, value of feature are random
-
-
#define featureZ 0x??
#define CHECK_CHAR(x) ((x==featureA)||(x==featureB)||(x==featureC) ------- (x==featureZ)? TRUE: FALSE)
大家好,我得到了一组UART header 来指示命令的用途。所以每次我使用宏检查 header ,但我意识到当命令不断增加并且宏长度也不断增加时,它使代码非常混乱。当功能越来越多时,我正在寻找一种机制来处理这种检查。
假设您的值遵循上面的简单模式,这将有效:
#define CHECK_CHAR(x) ( ((x)&0xf) == 0 && (x) >= featureA && (x) < featureInvalid )
您将 featureInvalid
定义为 featureZ
之后的下一个逻辑值。
由于这似乎是一次 运行 时间检查,您可以通过使用查找 table 来显着加快程序速度。它还将使代码更具可读性。假设你可以腾出 256 字节的 flash 并且所有代码都是唯一的,那么:
bool CHECK_CHAR (uint8_t ch)
{
const bool LOOKUP [256] =
{
[featureA] = true,
[featureB] = true,
[featureC] = true,
};
return LOOKUP[ch];
}
第二个最佳选择是 uint8_t
常量的排序数组 + 二进制搜索。