0

我这样做只是为了学习目的。但是在这样做的时候我发现了一个问题。这里 x 是常量整数,编译器仍然给我错误。我正在使用 gcc 编译器。请解释这个错误的原因是什么以及如何避免它。

#include<stdio.h>
int main()
{
int const  x = 10;
int y = 20;
switch(y)
{
    case x:      //error: case label does not reduce to an integer constant
    printf("value of x: %d\n",x);   
    break;
}
}
4

5 回答 5

2

C 中switch 语句的语法如下:

selection-statement:
switch ( expression ) statement
  labeled-statement:
  case constant-expression : statement
  default : statement

因此,您只能将常量表达式用作“案例值”。常量表达式与常量变量不同。换句话说 - 对不起,但你不能那样做。

于 2013-10-02T14:48:07.683 回答
2

您可以使用预处理器作为解决方法:

#define X 10
// ...
case X:
于 2013-10-02T14:49:33.300 回答
1

可能知道这x是一个常量,但编译器无法保证:它仍然可以在 C 中进行修改x。一种方法是获取其地址(通过指针)并取消引用它。

在 C 中,您只能打开文字整数类型;更正式地说,一个常量表达式

于 2013-10-02T14:49:40.013 回答
0

在这种情况下,您必须使用if语句,因为 Cswitch() 不采用表达式。它需要一个常数。

于 2013-10-02T14:48:09.107 回答
0

case语句需要常量。您可以完成类似于使用宏所做的事情。

#define TEN 10
#include<stdio.h>
int main()
{
int const  x = TEN;
int y = 20;
switch(y)
{
    case TEN:      //error: case label does not reduce to an integer constant
    printf("value of x: %d\n",x);   
    break;
}
}
于 2013-10-02T14:50:00.610 回答