linux内核中阶梯判断switch-case的一种罕见用法(连续阶梯值的情况)

📅 2026/6/24 2:11:00
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:内容1break;case 4 ... 15:内容2break;从上面看好几个连续的阶梯值都运行相同的内容因此使用了“开始值空格...空格结束值”这种写法。之所以记录下来是因为这种写法在我看的linux内核源码中出现的概率特别小这种写法不常见但是也是存在的因此特意写这篇文章记录。注意我又查询了一下AI,发现这种写法只有在GCC扩展中才允许这样写GCC以及兼容的编译器例如clang支持这种写法。这种写法不属于标准ISO C/C 标准不包含该语法MSVC 等非 GNU 编译器通常不支持。因此如果是GCC或者GCC的变种例如arm-linux-gcc是支持这种写法的如果keil、IAR环境中不能使用这种写法需要注意。