【问题标题】:Assert Statements not functioning properly?断言语句不能正常运行?
【发布时间】:2018-02-17 09:45:04
【问题描述】:

我无法理解断言语句的性质

我以为我的程序运行不正常,但是当我在 main 打印出程序返回给我的返回值时,它正是我的 assert 语句应该接受的值。我不确定发生了什么。我将函数复制粘贴到另一个文件中,然后复制粘贴我的断言语句,这次不同的断言案例起作用(一些不起作用的情况,现在起作用,而一些起作用的情况,现在不起作用)。 当我通过调试器工作时,似乎断言语句导致了某个逻辑语句

有时不工作,当逻辑应该工作时。我不明白为什么...有人可以向我解释一下吗?

【问题讨论】:

  • 使用assert时要小心。首先,它是一个宏,这意味着它可以多次评估其参数。其次,当定义 NDEBUG 宏时它什么也不做,在某些构建系统上,它会自动设置为发布构建。第三,一个失败的断言会强制中止你的程序,让它看起来像一个崩溃。
  • 是的,会的!谢谢。

标签: c++


【解决方案1】:

问题是您修改了removeDuplicatedValues 内部传递的数组,因此首先assert((removeDuplicatedValues(duplicates1, 5)) == 1); 断言成功,但是当您使用相同的数组assert((removeDuplicatedValues(duplicates1, 4)) == 1); 调用下一个断言时,它将失败,因为已经从该数组中删除了重复项。所以你应该重写你的测试只使用一次数组(甚至切换到专用的单元测试框架):

{
   string duplicates[7] = { "kek" , "hello" , "kek" , "daisy" , "bear" , "bear" , "bear" };
   assert((removeDuplicatedValues(duplicates, 5)) == 1); // ok
}
{
   string duplicates[7] = { "kek" , "hello" , "kek" , "daisy" , "bear" , "bear" , "bear" };
   assert((removeDuplicatedValues(duplicates, 4)) == 1); // ok
}

【讨论】:

  • 哦,哇,我不知道这个。非常感谢您如此简洁明了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-06
  • 2011-03-14
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多