我是C和编程的初学者(我已经用C / C ++编程了两年了),我用过的唯一类型的程序是命令行数学处理器,它接受参数并对其进行操作他们。根据输入的内容,没有分析要做什么。我不知道怎么做这样的事情,所以我最近一直在做的是设计我的程序,如:
printf("What feature to use?");
int response;
scanf("%d", response);
if (response == 1)
{
feature01();
}
if (response == 2)
{
feature02();
}
......我继续这样做。对于我的程序通常少于10个独特功能,这是可以的,但仅限于暂时。如果我曾编写过具有50-100个独特分支功能的程序,则可能存在问题。如何在不使用上述方式的if语句的情况下处理输入和分支到不同的功能?
答案 0 :(得分:3)
在许多情况下,您可以使用if
替换关于互斥值的一系列switch
语句:
switch (response)
{
case 1:
feature01();
break;
case 2:
feature02();
break;
default:
featureXX();
break;
}
这大致相当于:
if (response == 1)
{
feature01();
}
else if (response == 2)
{
feature02();
}
else
{
featureXX();
}
...除了编译器可以更多地优化switch
之外。
答案 1 :(得分:2)
您可以创建一个功能表。首先是typedef
typedef void (*feature)();
feature
现在代表一个指向函数的指针,该函数不带参数并返回void
。
现在,写(并注意索引更改)
void feature0() {...}
void feature1() {...}
// ...
void feature9() {...}
然后把它们放到一个数组中:
feature[] actions = {&feature0, &feature1, ..., &feature9};
然后你的代码变成了(错误检查遗漏):
printf("What feature to use?");
int response;
scanf("%d", &response);
actions[response]();
调用函数的指针在被调用时被视为实际函数。