开关和外壳出错?

kTi*_*ari 1 c

我对以下C代码感到困惑:

int main()
{
 const int i=2;

 switch(2)
 {
   case 1:
     printf("this is case 1");
     break;
   case i:
     printf("it should be case 2");
 }
Run Code Online (Sandbox Code Playgroud)

我知道在关键字之后case,应该有一个常量表达式.

由于已声明i为常量,为什么此代码会出现编译错误?

cni*_*tar 9

因为在C中a const不是真正的编译时常量.它只是一个只读对象.关于这个主题有一个C FAQ.

  • 如果这是C++,那么代码将是古怪的(`switch(2)`不是很明智)但它会起作用. (4认同)