我在一个安全关键的嵌入式 C 项目中,并且有一个关于检测布尔变量中的内存损坏(例如缓冲区溢出)的讨论。众所周知,在 C 语言中,“布尔”类型实际上是一个 N 位整数,这意味着它可能有 2 N -2 个无效值。例如,如果您将 FALSE 声明为 0,将 TRUE 声明为 1(通过宏、常量或枚举),则可以说 <0(在有符号类型的情况下)或 >1 是内存损坏(或错误)的后果。
所以理论上应该可以构造这样的故障捕获代码块:
if (b == TRUE) { /* Good, do something */ }
else if (b == FALSE) { /* Good, but don't do anything */ }
else { /* Memory corruption. Deal with it. */ }
或者用开关盒来做。状态变量和其他枚举类型是强制性的,但是为布尔值做这件事肯定会增加很多代码,我的问题是——值得付出努力吗?