You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言中switch(...) while(0)语法的合法性及作用解析

关于C语言中switch (...) while (0) {}语法的解析

我最近发现switch (...) while (0) {}在C语言中是合法的,但找不到相关解释。仅在一个代码混淆的仓库中见过该写法,同样没有解释。

查阅资料时,结果都只涉及while或switch单独的用法,完全没提到这种语法。我猜测这是一种合法但极为罕见、可能无用的标准滥用,希望有人帮忙理解它。


语法解析

switch语句后需紧跟一个选择语句,可以是包含case语句的代码块,也可以是带有自身代码块的循环等。这意味着以下写法在C语言中是合法的:

switch (...) while (...) switch (...) {}

switch并不关心后续跟随的是什么语句,它只会查找case和/或default标签。

比如这段代码:

switch (1) while (0) {
    puts("Not executed");
}

其中的puts语句不会执行,因为没有匹配的case或default标签,此时switch基本无用,编译器会给出警告并移除该switch。

再看这个示例:

#include <stdio.h>

int main(void) {
    switch (1) while (1) switch (0) {
        case 1:
        puts("hello");
    }
}

程序会立即退出且无任何输出,因为外层switch(1)没有case 1或default标签。如果添加标签:

switch (1) case 1: while (1) switch (0)

程序会进入无限循环,因为最内层的switch(0)没有case 0或default标签,无法退出循环。

结论

while (0)在这里只是对C语言语法的滥用,除了用于代码混淆外没有实际用途,但了解这种语法细节对理解C语言的语法规则仍有意义。


内容的提问来源于stack exchange,提问作者Chi_Iroh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 10:17:35