0

我们如何使用可变变量作为 switch case 标签。换句话说,我定义了一个宏。但我需要在运行时根据条件更改此值。我该如何实施?

示例如下,

在这里,案例“FOO”会起作用吗?

#define CONDITION (strcmp(str, "hello") == 0)
#define FOO1 (10)
#define FOO2 (20)
#define FOO ((CONDITION) ? (FOO1) : (FOO2))


char *var="hello";

int main()
{
  int p = 20;
  switch(p) {
  case FOO:
      printf("\n case FOO");
      break;
  case 30:
      printf("\n case 30");
      break;
  default:
      printf("\n case default");
      break;
  }

    return(0);
}

4

2 回答 2

3

switch条件需要在编译时解决。这些case值需要是编译时常量表达式

根据您的问题,您想使用运行时条件来更改 的值case,因此这是不可能的。

实现运行时检查的一种方法是使用if条件。

于 2013-10-19T02:16:51.307 回答
0

你的宏#define CONDITION (strcmp(str, "hello") == 0)不完整。它不接受任何争论。

编译器会简单地说 str 没有在这个范围内定义。

无论如何,案例值是常量,因此您将无法实现这一点,因为您的条件取决于运行时输入。

重要的是要知道大多数编译器通过分支表实现案例。这是可能的,因为 case 值是编译时已知的(即常量)。编译器将生成代码以将您的输入用作此分支表的索引,以获取特定案例的逻辑。

tl;博士 - 你不能使用开关。改用 if-elseif-else

于 2013-10-19T02:17:54.170 回答