我有一个大型代码库,主要用C语言编写,有几个枚举。最近我修改了其中一个枚举,它产生了重大影响,因为我有点“错误” - 估计了影响。 有一个看起来像这样的枚举: -
typedef enum en_e_type
{
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2,
ENUM_VAL_3 = 3,
ENUM_VAL_MAX = 4,
}en_e;
这已改为
typedef enum en_e_type
{
ENUM_VAL_1 = 1,
ENUM_VAL_2 = 2,
ENUM_VAL_3 = 3,
ENUM_VAL_MAX = ENUM_VAL_3 ,
}en_e;
我们可以看到ENUM_VAL_MAX
的值已被修改。
我的代码中有一些看起来像这样的断言
ASSERT (in_value < ENUM_VAL_MAX )
如果有这样的条件: -
if (in_val < ENUM_VAL_MAX)
我们总是期待in_value < ENUM_VAL_MAX
并且随着新的枚举更改,asserts
和if条件应该相应地进行修改,但其中一些已经错过,因此问题就出现了。
我的问题是,识别这类错误的最佳方法是什么?是否有一些静态分析器工具可以查看代码差异并相应地分析其影响?对于前者在这种情况下,是否有一个工具可能会指向这些if/assert
条件(通过静态解析代码)并发出一些警告?我看着赫尔格林德,但似乎没有帮助。
答案 0 :(得分:1)
你可能不想听到这个,但是:
断言应基于记录的行为。在这种情况下,应该在枚举值之上有一个摘要,说ENUM_VAL_MAX大于任何前面的值。
重构时,请务必右键点击 - &gt;检查引用(大多数IDE都有此选项)并滚动它。您将在概述中看到它正在使用的代码行,因此您将检测到比较。