彻底退出C功能

时间:2011-04-05 05:26:50

标签: c function return

我有几个功能。基本上是一个菜单,用户可以选择1-n个不同的选项,每个选项都有一个与之相关的功能。在这个例子中它被愚蠢了。

我想要确定的是提前退出函数的最佳方法。例如,当用户在菜单选项的功能中按Enter键时,我希望程序将它们发送回菜单而不在该功能中运行任何其他内容。

在下面的情况中,我只需致电showMenu()并在其后面添加return语句。唯一的问题是,如果用户退出多个函数,将会有一系列返回语句需要在最后解开。

有人可以告诉我是否有更有效的方法来实现这一点,或者我是否有钱。

void showMenu()
{
   //Display menu

   //Prompt user for menu option

   //Run function of appropriate menu option
   runSelectedFunction();
} 

void runSelectedFunction()
{
   //Get user input for the function and validate

   //Check if the user input was only a '\n' if so show the menu and exit
   showMenu();
   return;

   //Do the stuff that this function is meant to do.
}

3 个答案:

答案 0 :(得分:4)

对我来说很好看。或者 - 因为有许多反对有多个退出点组成一个函数 - 你可以这样做:

void func()
{
   //get input

   if ( checkMenu() )
   {
      //do the stuff I am meant to do
   }
   else
   { 
      showMenu();
   }
}

因此您要避免在函数中添加第二个返回值。此外,根据您的需要,您可以始终在函数末尾进行showMenu()调用

HTH

马里奥

答案 1 :(得分:0)

最好的方法?简而言之,不要。

为什么?

虽然它没有任何技术上的错误,并且你会发现所有,但在尝试追踪复杂代码中的错误或内存泄漏时,有时会导致令人头疼的问题。

仅在绝对必要时使用提前退货,然后首先尝试寻找备选方案:)

答案 2 :(得分:0)

另一种方法是使用以下模式来确保您的函数始终从一个地方返回,让您有机会始终释放资源(或报告错误等):

int func(void)
{
    int ret = 0;

    do
    {
        if (!allocate_resource())
        {
            ret = -1;
            break;
        }

        if (!allocate_more_resources())
        {
            ret = -2;
            break;
        }

        do_stuff();
    }
    while (0);

    free_allocated_resources();

    return (ret);
}