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()
写这样的断言的人必须遭受严厉的谈话。 (如果我是你,我会提高警告级别 - 如果存在 - 发生错误)。 – StoryTeller 2013-02-21 17:38:21
编译出来的代码中的大多数副作用病例都很难检测到。当你不想要误报时更是如此。 – delnan 2013-02-21 17:40:47
我建议使用更复杂的静态分析工具之一,例如Coverity,Parasoft或Klocwork。这些工具会检查你的源代码是否有这样的错误还有更低成本的SA工具,但我不确定他们是否会发现您正在讨论的问题。 – 2013-02-21 17:43:16