在 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 常量的排序数组 + 二进制搜索。