'返回'作为函数指针数组中的函数

时间:2013-03-06 14:07:29

标签: c function return function-pointers

所以我在这里工作。

{
    int Test;
    void (*functions[5])() = {
        return,
        one,
        two,
        three,
        four
    };

    for (Test = takeInput(5);; Test = takeInput(5)){
        cls();
        Print(L"0)  Abort\n");
        Print(L"1)  One\n");
        Print(L"2)  Two\n");
        Print(L"3)  Three\n");
        Print(L"4)  Four\n");
        Print(L"Enter Selection: ");
        (*functions[Test])();
    }
}

这是我尝试做的事情的要点。这是某种上下文的菜单系统(和takeInput(5),将暂停输入,停止循环,直到有人输入数字)。

问题是,以这种方式使用return显然是错误的。我认为看到(我认为)返回是一个函数,我无法理解为什么它不能被放入函数指针数组以便突破菜单。我想我可以创建一个虚函数,它在调用时基本上只返回true,并检查它(问题是所有其他函数都返回void)。即使这样有效,我宁愿有一个像上面的非工作示例一样自包含的解决方案。

有没有一种漂亮,干净,希望简短的做法,比我想到的更好?

2 个答案:

答案 0 :(得分:3)

return不是函数,它没有地址,因此你不能在指向函数的指针数组中使用它。

此外,Test在前几次使用时似乎未初始化:

for (Test;

(*functions[Test])();

如果您想要突破for循环,则必须使用breakreturnfor(;condition;)中两个分号之间的适当条件。< / p>

函数调用不会破坏循环。除非,它是异乎寻常的,如abort()exit()longjmp()

答案 1 :(得分:1)

我用return替换函数数组中的NULL并在执行函数之前测试null,当函数指针为NULL时返回。