【问题标题】:Is there a verify function in c standard libraries?c标准库中是否有验证功能?
【发布时间】:2012-06-14 10:33:48
【问题描述】:

标准 c 库中是否有 verify() 函数(例如 msvc 中的 VERIFY())或类似函数,还是我必须自己编写?如果有,它在哪个标题下?

编辑: assert 和 verify 的区别在于,verify 仍然会在 release 构建中执行函数,而 assert 中的语句不会在 release 中编译。

assert( printf("assert ") );

verify( printf("verify") );

在调试中将打印"assert verify",但在发布中将打印"verify"

【问题讨论】:

  • 在发布版本中是否启用断言完全取决于您 - 这由 NDEBUG 宏控制。
  • 我明白了,答案是否定的,这只是微软的事情。
  • 如果你喜欢用微软的方式做事,那么你可以用例如编译。 gcc -DVERIFY=assert ... 但最好是可移植的,只需在代码中使用 assert

标签: c standard-library


【解决方案1】:

在运行时,C 在assert.h 中有assert 宏。

在编译时,C(自 C11 起)在 assert.h 中具有 static_assert 宏。

有关信息,对于static_assert,一些 C89/C99 编译器也将其作为编译器扩展包含在内。例如,IAR 编译器在intrinsics.h 中有static_assert 函数。

【讨论】:

  • 澄清了我的问题,我不是在寻找断言
  • @yuumei 但assert 的工作方式类似于 MS 文档中的 verify。在 C 中,assert 仅在未定义 NDEBUG 宏时执行其工作。
【解决方案2】:

您可以使用CUnit 进行单元测试。它是 Java 的旧 JUnit 库的 C 端口。

稍后编辑:似乎有一个我不知道的类似宏。

【讨论】:

    【解决方案3】:

    您可以使用 assert.h 中定义的断言宏

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 2011-11-14
      • 1970-01-01
      • 2021-05-10
      • 2021-05-31
      • 2021-06-15
      • 1970-01-01
      相关资源
      最近更新 更多