Bootstrap

Clang编译警告:unannotated fall-through between switch labels [-Werror,-Wimplicit-fallthrough]

在使用CLang编译C++源码时出现这种警告,原因是switch-case代码段里没有加break,例如下面这样:

switch (count) {
	case 3:
	    data[offset++] = 0;
	case 2:
	    data[offset++] = 0;
	case 1:
	    data[offset++] = 0;
}

但是有时候自己的代码逻辑上就是要不加break,那需要怎么解决这个警告?
解决方式:

#define FALLTHROUGH_INTENDED [[fallthrough]]

switch (count) {
	case 3:
	    data[offset++] = 0;
	    FALLTHROUGH_INTENDED;
	case 2:
	    data[offset++] = 0;
	    FALLTHROUGH_INTENDED;
	case 1:
	    data[offset++] = 0;
}

加的FALLTHROUGH_INTENDED是为了让编译器忽略-Wimplicit-fallthrough这个警告。

;