代码之家  ›  专栏  ›  技术社区  ›  WilliamKF

什么时候应该使用assert()?

  •  11
  • WilliamKF  · 技术社区  · 14 年前

    在开发一个具有许多开发人员的大型C++编程项目时,我们遇到了代码中不正确使用AsScript()的问题,这些结果导致断言确实发生,产品崩溃。

    作为第一个破绽,我想说assert()应该只用于记录一个被认为是不可能达到的条件,并且应该在运行时将其标识为assert()失败,如果它是因为违反了编程假设而出现的。

    人们能做得更好吗?你对assert()有什么经验?

    4 回复  |  直到 6 年前
        1
  •  13
  •   codymanix    14 年前

    例外情况 外部 (方法外部或程序外部)如参数检查和丢失/有缺陷的外部资源,如文件、连接或用户输入。

    断言 表示

        2
  •  1
  •   ggarber    14 年前

    应使用assert检查所有不应发生的情况:

    • 中间计算结果

    但是,您应该只在调试版本中或者在显式激活以供发布时(而不是在发布给客户的版本中)包含这些断言。

        3
  •  1
  •   Null Manu343726    4 年前

    任何 不需要的程序状态:

    • 函数前提条件
    • 有时我会在每次API调用后将它们插入宏中: glDrawArray(); checkOpenGLError(); -- checkOpenGLError() 将呼叫 getGLError() 如果打开
    • assert(something == null);
    • 有时GDB对我撒谎(iossdk3.2)。我用断言来证明。

    请注意,“不需要的程序状态”排除了运行时自然发生的错误,例如由于权限或HD失败而无法打开用户选择的文件。在这些情况下,使用断言是不明智的。

        4
  •  0
  •   seand    14 年前