Here an example of my code:
void MyFunc()
{
if(funcA(varA) == 0)
{
if(funcB(varB) == 0)
{
if(funcC(varC) == 0)
{
//Success funcC
}
else
{
//error with funcC
}
}
else
{
//error with funcB
}
}
else
{
//error with funcA
}
}
So the code will be like, if funcA()
returns zero ONLY then execute funcB(), if funcB()
returns zero ONLY then execute funcC()
and so on. My question is how can I replace that nested if...else
statements with some other optimized method?
答案 0 :(得分:6)
要防止一堆范围,如果嵌套了,可以改为快速失败:
if(funcA(varA)) // if funcA returns 0, only then proceed
return;
if(funcB(varB))
return;
if(funcC(varC))
return;
如果您要打印一些错误,可以展开if
:
if(funcA(varA))
{
//error..
return;
}
或者,如果您不需要此类信息,请使用短路单线纸,如果funcB
返回funcA
,则只会运行0
,等等:
!funcA(varA) && !funcB(varB) && !funcC(varC);
答案 1 :(得分:2)
您的代码完全等同于
void MyFunc()
{
if(funcA(varA)){
//error with funcA
return;
}
if(funcB(varB)){
//error with funcB
return;
}
if(funcC(varC)){
//error with funcC
return;
}
//Success funcC [sic.]
}
在需要使用funcD
的情况下,存在明显的模式也可以更好地扩展。
答案 2 :(得分:2)
不要。
除非您的编码标准有此要求,否则原始代码必须足够清楚,并在需要时提供注释的地方。
在C语言中,低级优化应留给编译器。程序员的责任是使用正确的高级算法生成可读代码。
行数对旧的基本语言或javascript中的优化很重要,而不是C语言。
答案 3 :(得分:0)
尝试
void MyFunc()
{
if(funcA(varA) == 0 && funcB(varB) == 0 && funcC(varC) == 0)
{
}
else
{
}
}
如果您的第一个函数仅求出期望的结果,则将调用funcB,在下一个函数的情况下相同。 唯一的缺点是您无法检查其中哪个不会产生期望的结果。