【发布时间】:2013-03-06 14:07:28
【问题描述】:
这就是我的工作。
{
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)。即使这样可行,我也希望有一个与上述不可行的示例一样独立的解决方案。
有没有一种比我想象的更好的、干净、希望简短的方法来做这件事?
【问题讨论】:
-
return不是函数,是保留字。 -
我将函数数组中的
return替换为NULL并在执行函数之前测试null,当函数指针为NULL时返回。 -
把它作为一个答案,我会这样标记它。无论如何检查它可能是有意义的,以确保我没有尝试将空指针作为函数调用。我的问题是我看不到如何将函数的索引留空(现在你说了很容易)以便能够跳过它。
标签: c function return function-pointers