【问题标题】:How to use const int labels in a switch statement [duplicate]如何在 switch 语句中使用 const int 标签 [重复]
【发布时间】:2021-11-25 18:40:42
【问题描述】:

我试图在 switch 语句中使用 cons int 标签,但我不断收到错误,即 case 标签不会减少为整数常量,即使它们是 const int 变量。 我这样定义了 const int 变量:

const int ADD = 6;
const int AND = 7;
const int OR = 8;
const int XOR = 9;
const int SLT = 10;
const int SLL = 11;
const int SRA = 12;
const int SUB = 13;

我在我的 switch 语句中使用它们,如下所示:

switch(alu_op_code)
    {
        case ADD:
            C = A + B;
            break;
        case AND:
            C = A & B;
            break;
        case OR:
            C = A | B;
            break;
        case XOR:
            C = A ^ B;
            break;
        case SLT:
            C = A < B;
            break;
        case SLL:
            C = (unsigned int)A << B;
            break;
        case SRA:
            C = A >> B;
            break;
        default:
            C = 0;
            break;
    }

这些是获取的错误: enter image description here

我该如何解决这个问题?

【问题讨论】:

  • 使用#define ADD 6或使用enum

标签: c


【解决方案1】:

开关标签必须是常量表达式,它们必须在编译时进行评估。如果要在运行时值上进行分支,则必须使用 if。

一个 const 限定的变量不是一个常量表达式,它只是一个你不能修改的值。

整数常量表达式的形式详见6.6(6)【C99和C2011标准的n1570草案】:

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

只允许结果为整数常量的 sizeof 表达式的限制排除了操作数为可变长度数组的 sizeof 表达式。

【讨论】:

  • 2 个答案的任何原因。合二为一
  • 有两种不同的方法来解决这个问题,你为什么要给我地雷点?!!!!
猜你喜欢
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
相关资源
最近更新 更多