assert()修改变量时发出警告

warning when assert() modifies variables

本文关键字:警告 变量 修改 assert      更新时间:2023-10-16

当修改assert()debug_print()内部的变量时,我能做些什么来获得编译器警告吗?

我想防止像这样的错误发生

int i=0;
assert((++i)); // i is modified only in debug mode
std::set<int> s;
debug_print(("item inserted: %dn", s.insert(5).first )); // set is modified only in debug mode

假设我有一组仅在调试模式下构建的包装器函数,在那里我可以进行必要的检查

MyDbgAssert() // #define that wraps assert()
MyDbgPrint()  // #define that wraps printf() 

有一些工具(例如Coverity)可以检测宏/断言中的副作用。CERT提供了此类工具的列表

如果您在调试和发布版本中都认真运行单元测试,那么单元测试将检测到这种错误。