变量在switch语句中声明和初始化

Moe*_*oeb 4 c variables switch-statement

为什么这个程序不输出20?

#include<stdio.h>

int main() {
    int a = 1;
    switch (a) {
            int b = 20;
        case 1:
        {
            printf("b is %d\n", b);
            break;
        }
        default:
        {
            printf("b is %d\n", b);
            break;
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Ras*_*Kaj 30

因为switch语句跳转到相关的case,所以该行int b = 20永远不会被执行.

  • 哇,这家伙从21个声誉变为201 lol (3认同)
  • 恭喜你第一天在这里击中代表帽,Rasmus. (3认同)

Jer*_*fin 8

您的编译器应该警告您这一点.'b'的初始化位于switch语句的开头,它永远不会被执行 - 执行将始终直接从switch语句标题流到匹配的case标签.