2013-02-21 44 views
0

当我修改assert()debug_print()中的变量时,有什么办法可以获得编译器警告吗?当assert()修改变量时发出警告

我想,以防止类似这些错误的发生

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() 
+3

写这样的断言的人必须遭受严厉的谈话。 (如果我是你,我会提高警告级别 - 如果存在 - 发生错误)。 – StoryTeller 2013-02-21 17:38:21

+1

编译出来的代码中的大多数副作用病例都很难检测到。当你不想要误报时更是如此。 – delnan 2013-02-21 17:40:47

+1

我建议使用更复杂的静态分析工具之一,例如Coverity,Parasoft或Klocwork。这些工具会检查你的源代码是否有这样的错误还有更低成本的SA工具,但我不确定他们是否会发现您正在讨论的问题。 – 2013-02-21 17:43:16

回答

2

有包装功能是检测宏/断言中的副作用的工具(例如Coverity)。 CERT提供了一个list of such tools

0

单元测试将检测这种类型的错误,如果你在调试版本和发布版本上虔诚地运行它们。

相关问题