在 C 项目中(OpenVPN 是有问题的项目,提交4029971240b6274b9b30e76ff74c7f689d7d9750)我们模拟了 bool
typedef int bool;
#define false 0
#define true 1
现在切换到 C99 bool
#include <stdbool.h>
但是在项目中,布尔值在某处使用不当。我知道 std bool 的行为不同。例如
bool t;
t=2;
if ( t == true)
printf("True!\n");
else
printf("False!\n");
将返回真!和stdbool.h
假!与#define
仿真。
我的问题有没有办法找到这些与 stdbool 和仿真 bool 表现不同的代码部分?也许我忽略了一些编译器标志或可以区分的良好 llvm 或 gcc 中间格式?
它不像上面的例子那么简单,但必须是不那么容易看到的东西。绝对不是a == true。
更新: 我们发现了问题(mbuf_set 有一个 int 成员 len)。这有点愚蠢,但问题仍然是如何抓住这些。我很惊讶整数溢出检查没有捕捉到这样的事情:
static inline bool
mbuf_len (const struct mbuf_set *ms)
{
return ms->len;
}