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;
}
是否有编译器无法优化断言和结束返回语句以及执行语句的情况?这种编码模式试图防范什么?
答案 0 :(得分:0)
“assert”关键字意味着是一个调试工具(如果定义了NDEBUG,则禁用它)。因此,我的猜测是上面的模式是为了防止代码中的未来更改,这将使switch语句不能涵盖所有选项。