linux内核中阶梯判断switch-case的一种罕见用法(连续阶梯值的情况)
最近,我在看linux的内核源码程序,发现了switch-case阶梯判断中一种新用法,具体表现为:case后面跟着连续几个阶梯值,具体表现为:
switch (hw.w) { case 0 ... 1: if (SYN_CAP_MULTIFINGER(priv->capabilities)) num_fingers = hw.w + 2; break; case 2: if (SYN_MODEL_PEN(priv->model_id)) ; /* Nothing, treat a pen as a single finger */ break; case 4 ... 15: if (SYN_CAP_PALMDETECT(priv->capabilities)) finger_width = hw.w; break; }case 0 ... 1:
内容1;
break;
case 4 ... 15:
内容2;
break;
从上面看好几个连续的阶梯值都运行相同的内容,因此使用了“开始值+空格+...+空格+结束值”这种写法。
之所以记录下来是因为这种写法在我看的linux内核源码中出现的概率特别小,这种写法不常见,但是也是存在的,因此特意写这篇文章记录。
注意:
我又查询了一下AI,发现这种写法只有在GCC扩展中才允许这样写,GCC以及兼容的编译器例如(clang)支持这种写法。这种写法不属于标准:ISO C/C++ 标准不包含该语法,MSVC 等非 GNU 编译器通常不支持。
因此,如果是GCC或者GCC的变种例如arm-linux-gcc是支持这种写法的,如果keil、IAR环境中不能使用这种写法,需要注意。
