我正在编写一些具有 SDK 的设备。
假设我想在显示屏上显示一些菜单。你通常是这样进行的:
void showSomeMenu()
{
...
drawItem(0, "menu option1");
drawItem(1, "menu option2");
while(1)
{
key = getKey();
if(key == KEY_ENTER)
{
showSomeOtherMenu();
return; // or break
}
}
...
}
可以看到,如果用户点击上面的进入,他就可以打开someOtherMenu
. 现在说那个someOtherMenu
用户想回去。然后你像这样实现它:
void showSomeOtherMenu()
{
...
// add menu items
while(1)
{
key = getKey();
if(key == KEY_ENTER)
{
showSomeMenu(); // Will open previous menu (implemented in the first snippet)
return;
}
}
...
}
我觉得这种方法很奇怪的是:说有人叫showSomeMenu
. showSomeOtherMenu
然后通过按 Enter 键调用。现在从showSomeOtherMenu
他单击 Enter,这将再次调用showSomeMenu
- 但请注意,第一次调用showSomeMenu
从未有机会返回。
即使这种方法有效并且菜单将正确显示,我想知道这是否会以函数相互调用的无限循环结束。也许比我会有堆栈溢出问题或类似的问题。
我有理由担心吗?他们的示例中显示了这种方法。所以我认为这应该是正确的方法。