使用return语句在C ++中退出函数

时间:2014-05-04 16:12:51

标签: c++ function menu return submenu

当我们有函数时,return语句允许我们提前退出函数。即使对于没有返回类型的函数,我们也可以使用return来退出当前函数。

我的问题是:使用return退出函数返回函数调用点是不是一个好的编码习惯?

这种情况的一个很好的例子是带有子菜单的主菜单。

示例:

//Decalration
void mainMenu(); 
void subMenu(); 

int main()
{
    mainMenu();
    return 0;
}

//Definition
void mainMenu();
{
    //some codes
    subMenu();
}

void subMenu();
{
    int option;
    cout << "Choose 1 to return to main menu" << endl;
    cout << "Choose 2 to do whatever..." << endl;
    cin >> option;
    if (option == 1)
        return;    //Return to main menu (<--- Is this a good coding practice?)
    else
        //some codes
}

注意:我不是在分配时寻求帮助。这是一个有效的代码,我只是想知道是否使用return语句回到调用正确的做法的地步?如果没有,那么返回呼叫点的正确方法应该是什么。

1 个答案:

答案 0 :(得分:1)

C和C ++在这方面有所不同。

在C语言中,早期返回很容易导致清理(甚至关键业务代码)无法执行,尤其是在代码保持一段时间之后。

在C ++中,由于使用了异常,我们必须始终考虑早期退出的可能性。因此,好的C ++代码中多次返回不会有问题。清理由析构函数C ++&#34; RAII&#34;。

自动执行

从那时起,这是个人偏好,项目编码指南等问题。


关于您的代码示例,

void subMenu();
{
    int option;
    cout << "Choose 1 to return to main menu" << endl;
    cout << "Choose 2 to do whatever..." << endl;
    cin >> option;
    if (option == 1)
        return;    //Return to main menu (<--- Is this a good coding practice?)
    else
        //some codes
}

一个替代方案就是

void subMenu();
{
    int option;
    cout << "Choose 1 to return to main menu" << endl;
    cout << "Choose 2 to do whatever..." << endl;
    cin >> option;
    if (option != 1)
    {
        //some codes
    }
}

导致“退出模态上下文”被更明确地特别对待,但它已经被特别处理。