0

所以这就是我正在使用的。

{
    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 显然是错误的。我认为看到(我认为)return 是一个函数,我不明白为什么不能将它放入函数指针数组中以跳出菜单。我想我可以制作一个在调用时基本上只返回 true 的虚拟函数,然后检查它(问题在于所有其他函数都返回 void)。即使这样可行,我也希望有一个与上述非工作示例一样独立的解决方案。

有没有一种比我想象的更好的、干净的、希望简短的方法来做到这一点?

4

2 回答 2

3

return不是函数,它没有地址,因此您不能将它放在函数指针数组中。

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

for (Test;

(*functions[Test])();

如果你想跳出for循环,你必须在两个分号之间使用breakreturn或适当的条件for(;condition;)

函数调用不会中断循环。除非,它是异国情调的,例如abort(),exit()longjmp()

于 2013-03-06T14:10:46.537 回答
1

在执行函数之前,我会return在你的函数数组中替换NULL并测试 null ,当函数指针为NULL.

于 2013-03-06T14:42:37.293 回答