C语言编程中的开关
我写这段代码只是为了学习。但在这样做的同时,我发现了一个问题。这里x是常量整数,但编译器仍给我错误。我正在使用gcc编译器。请解释此错误的原因以及如何避免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
#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。这显然是一个重复的问题。为什么要发布答案?这显然是一个重复的问题。为什么要发布答案?