Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言编程中的开关_C - Fatal编程技术网

C语言编程中的开关

C语言编程中的开关,c,C,我写这段代码只是为了学习。但在这样做的同时,我发现了一个问题。这里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("valu

我写这段代码只是为了学习。但在这样做的同时,我发现了一个问题。这里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;
}
}
#包括
int main()
{
int const x=10;
int y=20;
开关(y)
{
案例x://错误:案例标签未减少为整数常量
printf(“x的值:%d\n”,x);
打破
}
}
C中a的语法如下:

selection-statement:
switch ( expression ) statement
  labeled-statement:
  case constant-expression : statement
  default : statement
因此,您只能使用常量表达式作为“大小写值”。换言之,对不起,你不能这样做。

C中a的语法如下:

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

因此,您只能使用常量表达式作为“大小写值”。换句话说-抱歉,但您不能这样做。

在这种情况下,您必须使用
if
语句,因为C的
开关()

不带表情。它需要一个常量。

在这种情况下,由于C的
开关()

不带表情。它需要一个常数。

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

#define X 10
// ...
case X:

您可以将预处理器用作解决方案:

#define X 10
// ...
case X:
您可能知道
x
是一个常量,但编译器无法保证它:仍然可以在C中修改
x
。一种方法是获取它的地址(通过指针)并取消对它的引用

在C语言中,只能打开文字整型;更正式地说,是一个常量表达式。

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


在C语言中,只能打开文字整型;更正式地说,常量表达式。

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;
}
}
#定义十个10
#包括
int main()
{
int const x=十;
int y=20;
开关(y)
{
案例10://错误:案例标签未减少为整数常量
printf(“x的值:%d\n”,x);
打破
}
}

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;
}
}
#定义十个10
#包括
int main()
{
int const x=十;
int y=20;
开关(y)
{
案例10://错误:案例标签未减少为整数常量
printf(“x的值:%d\n”,x);
打破
}
}


如果它是一个常量,为什么不使用
案例10:
,您还需要
默认值
case@user1例如为了可读性。记住,幻数是不好的。如果它是一个常量,为什么不使用
案例10:
,您还需要
默认值
case@user1例如为了可读性。记住魔法数字是不好的。好的……明白了……谢谢:)这显然是重复的。为什么要发布答案?@RedX:因为对我来说,回答这个问题比研究重复的问题容易得多。没有人会阻止你投票给一个傻瓜。好的……明白了……谢谢:)这显然是一个副本。为什么要发布答案?@RedX:因为对我来说,回答这个问题比研究重复的问题容易得多。没有人会阻止你投票,因为dupe.switch()接受一个表达式。案例xx:但没有。这显然是重复的。为什么要发布答案?对不起,我没有检查。可以将其标记为重复吗?switch()接受一个表达式。案例xx:但没有。这显然是重复的。为什么要发布答案?对不起,我没有检查。你们能把它标记为重复的吗?但据我所知,预处理器也是常量而不是常量限定符,这显然是重复的。为什么要发布答案?虽然最初的问题与链接的问题密切相关,但我认为这个答案(不是另一个答案的重复)仍然可能有助于消除不便,但据我所知,预处理器也是常量而不是常量限定符这显然是重复的。为什么要发布答案?虽然最初的问题与链接的问题密切相关,但我认为这个答案(不是另一个答案的重复)仍然有助于消除不便。这显然是重复的。为什么要发布答案?什么的副本<杰夫的回答跟在我的后面。如果它是第一个问题,那么它就不是一个重复的问题。关于网站上的另一个问题,请看投票结果。哦,你是说这个问题是重复的?我没想到要检查一下。我已经标记了。这个问题的答案解释了原因,但没有给出令人满意的解决方案IMHO@RedX。这显然是重复的。为什么要发布答案?什么的副本<杰夫的回答跟在我的后面。如果它是第一个问题,那么它就不是一个重复的问题。关于网站上的另一个问题,请看投票结果。哦,你是说这个问题是重复的?我没想到要检查一下。我已经标记了。该问题的答案解释了原因,但没有给出令人满意的解决方案IMHO@RedX。这显然是一个重复的问题。为什么要发布答案?这显然是一个重复的问题。为什么要发布答案?