cppcheck 认为宏中使用的变量没有被使用

cppcheck considers that variables used in macro are not used

例如,我有这个片段:

const int array_type = model.accessors[accessor_index].type;
Assert(array_type == TypeCode<T>(), "");

我收到这个错误:

Src/Engine/Animation/GltfLib.cpp:103:26: style: Variable 'array_type' is assigned a value that is never used. [unreadVariable]
    const int array_type = model.accessors[accessor_index].type;

Assert 是一个基于常规 assert 的宏,但在抛出错误的基础上使用了一些内部日志记录机制。

有没有办法让 cppcheck 注意到变量实际被使用了?

警告告诉您:禁用 Assert 时,您正在创建一个从未使用过的变量。

我建议将语句移动到 assert 语句中;但是,您也可以使用处理器在禁用调试时删除代码。

Assert(model.accessors[accessor_index].type == TypeCode<T>(), "");

另一方面,如果您确实需要该行代码(可能是因为 std::map::operator[] 是非常量),那么您应该在断言行中使用 at 并添加注释。