当我们有函数时,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语句回到调用正确的做法的地步?如果没有,那么返回呼叫点的正确方法应该是什么。
答案 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
}
}
导致“退出模态上下文”被更明确地特别对待,但它已经被特别处理。