0

当修改 aassert()或 a中的变量时,我能做些什么来获得编译器警告debug_print()

我想防止这样的错误发生

int i=0;
assert((++i)); // i is modified only in debug mode

std::set<int> s;
debug_print(("item inserted: %d\n", s.insert(5).first )); // set is modified only in debug mode

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

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

2 回答 2

2

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

于 2013-02-21T17:47:00.693 回答
0

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

于 2013-02-21T18:27:53.760 回答