宏作为案例在交换机案例中不工作在c

时间:2018-05-05 10:19:35

标签: c macros switch-statement

我正在做一个大学项目。我遇到的问题是这个问题的简化版本。

decrypt()

显示错误。我不明白。请解释一下...... 谢谢。

2 个答案:

答案 0 :(得分:4)

在C语言中,case标签必须是编译时常量。在你的代码中,ar [i]不编译时间常数。

C11 6.8.4.2转换声明(第3段):

  

每个案例标签的表达式应为整数常量   表达式并没有两个案例常量表达式相同   switch语句在转换后应具有相同的值。

答案 1 :(得分:1)

case表达式必须是编译时常量。表达式ar[i]不是编译时常量,它在运行时进行评估。

你可以通过一些重构来解决它:

switch (ar[i])
{
case h1:
    printf("got h1\n");
    break;
}

另一种方法当然是使用if语句,如

if (i == ar[i]) { ... }