C语言中Switch Case中的常量变量

时间:2017-03-20 04:58:24

标签: c

我对switch-case语句有疑问。我读到了' const变量'可用于开关盒。

然而,以下程序给我一个错误案例标签不会减少为整数常量

#include <stdio.h>
int main()
{
    int const var = 3;
    int num=3;
    switch (num)
    {
        case var:
            printf("constant var");
            break;
    }
}

我在哪里弄错了?

5 个答案:

答案 0 :(得分:1)

在C.所有情况下,标签必须是编译时常量,const变量是只读的,但没有常量。所以,你可以这样做

#define var 3

而不是

int const var = 3;

答案 1 :(得分:1)

根据C标准(N1570委员会草案):

6.8.4.2 The switch statement

  

每个case标签的表达式应为整型常量表达式,并且同一switch语句中的两个case常量表达式在转换后不应具有相同的值。 switch语句中最多可能有一个默认标签。 (任何封闭的switch语句都可以有一个默认的标签或case常量表达式,其值可以在封闭的switch语句中复制case常量表达式。)

6.6 Constant expressions定义integer constant expression

  

整数常量表达式117)应具有整数类型,并且只能具有整数常量的操作数,枚举常量,字符常量,结果为整数常量的sizeof表达式,_Alignof表达式以及作为强制转换的直接操作数的浮点常量。整数常量表达式中的转换运算符只能将算术类型转换为整数类型,除非作为sizeof或_Alignof运算符的操作数的一部分。

答案 2 :(得分:0)

变量包含常量值,而在创建常量变量时​​,它不会改变变量的目标。它始终是一个变量,switch case只采用常量值而不是变量。

#include <stdio.h>
int main()
{
    int const var = 3;
    int num=3;
    switch(num)
           {
           case var: // use a constant value(Not variable) here
                   printf("constant var");
                   break;
            }

}

答案 3 :(得分:0)

你的开关盒必须有这样的条件,而不是var

#include <stdio.h>
int main()
{
int const var = 3;
int num=3;
switch(num)
       {
       case 3:
               printf("constant var");
               break;
        }

}

而是使用#define var 3之类的:

#include <stdio.h>
#define var 3
int main()
{
//const int var = 3;
int num=3;
switch(num)
       {
       case var:
               printf("constant var");
               break;
        }
return 0;
}

在你的代码中,switch case正在寻找var constant而不是case 3

答案 4 :(得分:-1)

当您尝试切换大小写时,切换通常取决于分配给变量的值(在您的情况下,变量为num,其值为3)。这个变量的值甚至可以改变。没有规则,其值被切换的变量(num)应该是一个常量整数。开关案例不适用于硬编码值。取决于特定开关案例将执行的变量的值,甚至可以更改值(在您的代码中它不会,因为您已将其硬编码为3)请尝试此代码

 #include <stdio.h>
 int main()
 {
   //int const var = 3;
   int num=3; 
   switch(num)
   {
   case 3:    //If the value of num is "3", then execute this case.
           printf("constant var");
           break;
   case 4:    //If the value of num is "4", then execute this case.
           printf("Test case");
           break;
   default: //If the value of num is anything other than "3" and "4", then execute this case
            printf("Default case");
            break;
    }
  return 0; //This should be included as you are returning an integer
  }

在开关案例中,你应该提到(num)的值,具体取决于案件的执行情况。此外,请注意,当您将main()的返回类型声明为整数时,最好在最后添加return 0。使用num=3运行代码后,请使用num=4num=5尝试相同的代码。