为什么在具有返回的默认情况的switch语句之后抛出异常?

时间:2014-11-30 05:31:56

标签: exception-handling redis switch-statement case

Redis Ziplist implementation在其中一个函数中有一个奇怪的约定 - 一个带有default大小写后跟外部异常的switch语句:

static unsigned int zipIntSize(unsigned char encoding) {
    switch(encoding) {
        case ZIP_INT_8B:  return 1;
        case ZIP_INT_16B: return 2;
        case ZIP_INT_24B: return 3;
        case ZIP_INT_32B: return 4;
        case ZIP_INT_64B: return 8;
        default: return 0;
    }
    assert(NULL);
    return 0;
}

是否有编译器无法优化断言和结束返回语句以及执行语句的情况?这种编码模式试图防范什么?

1 个答案:

答案 0 :(得分:0)

“assert”关键字意味着是一个调试工具(如果定义了NDEBUG,则禁用它)。因此,我的猜测是上面的模式是为了防止代码中的未来更改,这将使switch语句不能涵盖所有选项。