c - 当你有很多选项时如何输入要运行的函数

标签 c if-statement input switch-statement

首先假设你有函数

void foo1 (...)
{...}
void foo2 (...)
{...}
void foo3 (...)
{...}
void foo4 (...)
{...}
void foo5 (...)
{...}

现在我知道我们可以使用其中任何一个来选择一个函数

void pickFunction1(char input[])
{
    if (strcmp(input, "foo1") == 0) foo1(...);
    else if (strcmp(input, "foo2") == 0) foo2(...);
    else if (strcmp(input, "foo3") == 0) foo3(...);
    else if (strcmp(input, "foo4") == 0) foo4(...);
    else if (strcmp(input, "foo5") == 0) foo5(...);
}

void pickFunction2(char input[])
{
    switch(input) {
        case 'foo1' :
            foo1(... );
            break;
        case 'foo2' :
            foo2(... );
            break;
        case 'foo3' :
            foo3(... );
            break;
        case 'foo4' :
            foo4(... );
            break;
        case 'foo5' :
            foo5(... );
            break;
}

现在我的问题是,当您有更多选项时会发生什么,假设您有 foo1(), foo2(),....foo10000() 然后是前两个 pickFunction s 将随着可用选项的数量线性增长(O(N),其中 N 是选项数量)。有没有办法使函数选择的这种线性增长变成更恒定的增长函数选择?就像 LISP 中类似于 (funcall input) 的东西?

最佳答案

看一下函数指针数组,它是一个数组,其中数组的每个单元格都存储函数的地址。可以循环填写,用法相同。

关于c - 当你有很多选项时如何输入要运行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46761321/

相关文章:

编译器不会在 scanf() 处停止输入

regex - HTML 输入模式不起作用

c - strcpy:在 union 中使用 char** 变量作为参数

c - 排除 GNU 作为 (GAS) 标准启动代码

c - 调试 C 程序以求 400 万以下斐波那契数列的所有偶数项之和

mysql根据变量(存储过程)更新不同的行

c - If语句和顺序执行

Javascript:为了不间断显示图片,试图重构这么多IF语句

c++ - 包含所有必要的#include 语句的单个头文件

python - 如果为真,则从现在开始在 Python 中忽略变量