assertions - 使用断言的适当性

标签 assertions

您好,我发现了一个与断言相关的问题。它询问哪些行适本地使用了断言语句。

        23. int =5;
        24.
        25. public void stuff1(int x){
        26. assert(x>0);
        27. switch(x){
        28.     case 2:x=3;
        29.     default:assert false;
            }
            }
        30.
        31. private void stuff2(int y){
                assert(y<0);
            }
        32.
        33. private void stuff3(){
                assert(stuff4());
            }
        34.
        35. private boolean stuff4(){
                z=6; 
                return false;
            }

正确答案是“第 29 行和第 31 行的断言语句被正确使用”。

但我觉得第 29 行中使用断言没有用,因为它总是给出断言错误。如果 x 仍为 2,则将运行默认值并给出断言错误。为什么答案说它已经正确使用了第 29 行中的断言。请有人解释一下。

而且我觉得第 33 行中的断言不会被占用,因为 stuff4() 方法调用将始终返回 false,并且断言将始终为 false。正确吗?

最佳答案

断言(假)没问题。这是评论的机器可读版本

// should never be reached

我始终将断言视为机器可读(且可执行)的注释

assert(stuff4()) 是不同的。看起来是在测试stuff4的返回值。这很糟糕,因为在非调试版本中 stuff4 不会被调用(对于大多数断言实现);通常,断言宏在非调试版本中编译为空

关于assertions - 使用断言的适当性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25152799/

相关文章:

swift - Swift 中的前提条件和测试它们

macos - OS X Mountain Lion 电源断言

C++,谷歌测试/模拟 : assertion to test and object type

Python:断言字符串是否与格式匹配

PHPUnit assertNull() 测试失败

java - 如果日期相同,为什么 assertEquals 为假? hibernate

c++ - 调试断言失败 : _CrtIsValidHeapPointer(block)

c++ - xstring 在 0x1005E5F6 (ucrtbased.dll) 抛出未处理的异常

c++ - 为什么我的 vector 代码断言?到底什么是断言?

visual-studio - IIS 7 中不提示调试断言