切换C:变量中的语句以防万一?

Je *_*Rog 8 c compiler-construction switch-statement

#include <stdio.h>
int main(int argc, char *argv[]){
    char a = 'c';
    switch('c'){
        case a:
            printf("hi\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

以上内容不会为此错误编译:

case label does not reduce to an integer constant
Run Code Online (Sandbox Code Playgroud)

为什么不允许这样做?

Jos*_*hua 6

显式允许编译器使用有效的二叉树或跳转表来评估case语句.

因此,case语句是编译时常量.


Pet*_*der 5

想一想,如果你有以下内容怎么办:

int a = 1, b = 1, c = 1;

switch (a)
{
case b: return 1;
case c: return 2;
}
Run Code Online (Sandbox Code Playgroud)

会有什么回报?

案例标签需要保持不变,以便编译器可以证明没有歧义.