即使开关语法不接受大小写标签的变量,是否有任何解决方法来执行类似的操作,而不是简单的旧if-else比较?

最佳答案

通常为了解决这个问题,我使用一个结构和函数指针,只有一个if。
未经测试的例子,只是想知道我在说什么:

#include "cases_functions.h"

typedef struct s_switch
{
  char* value;
  void (*do)(void);
} t_switch;

t_switch cases[] =
{
  {"add", add},
  {"sub", sub},
  {"divide", div},
  {0, 0}
};

void personal_switch(char *what)
{
  int i = 0;

  while (cases[i].value)
  {
    if (strcmp(cases[i].value, what) == 0)
      cases[i].do();
    i++;
  }
}

有了它,您可以在运行时更改不同的案例,添加新的案例等等。。。
当然,选择方法是免费的,例如,您可以只使用int并使用==或更复杂的东西进行测试。

关于c - 如何在switch语句的case字段中使用变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13232417/

10-11 23:17