【问题标题】:Switch in C programming [duplicate]切换C编程[重复]
【发布时间】:2013-10-02 14:44:07
【问题描述】:

我编写此代码仅用于学习目的。但是在这样做的时候我发现了一个问题。这里 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;
}
}

【问题讨论】:

  • 如果它是一个常数,为什么不使用case 10:,你还需要default case
  • @user1 例如为了可读性。记住幻数不好。

标签: c


【解决方案1】:

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

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

【讨论】:

  • 但据我所知预处理器也是常量而不是常量限定符
  • 这显然是重复的。为什么要发布答案?
  • 虽然原始问题与链接的问题密切相关,但我认为这个答案(不是另一个答案的重复)仍然可能有助于消除不便
【解决方案2】:

switch statement 在 C 中的语法如下:

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

因此,您只能将常量表达式用作“案例值”。 Constant expression is not the same as constant variable。换句话说 - 对不起,但你不能那样做。

【讨论】:

  • 好的...知道了...谢谢:)
  • 这显然是重复的。为什么要发布答案?
  • @RedX:因为对我来说,回答这个问题比研究重复问题要容易得多。没有人阻止你投票给这个骗子。
【解决方案3】:

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

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

【讨论】:

  • 这显然是一个重复的问题。为什么要发布答案?
【解决方案4】:

在这种情况下,您必须使用 if 语句,因为 C 的 switch() 不带表情。它需要一个常数。

【讨论】:

  • switch() 接受一个表达式。案例 xx:虽然没有。
  • 这显然是重复的。为什么要发布答案?
  • 对不起,我没有检查。你能把它标记为重复吗?
【解决方案5】:

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;
}
}

【讨论】:

  • 这显然是重复的。为什么要发布答案?
  • 复制什么? devnulljev 的答案在我之后。如果是第一个,则不是重复的。
  • 关于网站上的另一个问题,请参阅关闭投票。
  • 哦,你的意思是问题重复了?我没想到要检查。我已经标记了它。
  • 该问题的答案解释了原因,但没有给出令人满意的解决方案恕我直言@RedX。
猜你喜欢
  • 2011-03-19
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2010-12-21
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多