1、先上一段代码
HI_S32 SAMPLE_VDEC_PIP(HI_VOID)
{
s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
if(s32Ret != HI_SUCCESS)
{
goto END1;
}
/************************************************/
if(s32Ret != HI_SUCCESS)
{
goto END2;
}
/************************************************/
s32Ret = SAMPLE_COMM_VDEC_Start(u32VdCnt, &stVdecChnAttr[0]);
if(s32Ret != HI_SUCCESS)
{
goto END3;
}
/************************************************/
if(s32Ret != HI_SUCCESS)
{
goto END4;
}
Sample_COMM_SetCrop(0);
/************************************************/
if(s32Ret != HI_SUCCESS)
{
goto END5;
}
/************************************************/
END5:
s32Ret = SAMPLE_COMM_VDEC_UnBindVpss(i, i);
END4:
SAMPLE_COMM_VO_StopChn(VoLayer, VO_MODE_1MUX);
END3:
SAMPLE_COMM_VPSS_Stop(u32GrpCnt, VPSS_CHN0);
return s32Ret;
END2:
SAMPLE_COMM_VDEC_Stop(u32VdCnt);
END1:
SAMPLE_COMM_SYS_Exit();
return s32Ret;
}
goto将会改变程序的运行顺序,C语言,代码是顺序执行的,如果goto将会跳过下面的代码
找到lable标签,如果lable没有加return,将会继续支持下一个lable的代码,如果加了return,直接结束函数的运行
注意一点是,在goto语句下面的代码不能定义变量,否则编译器通不过,
解决办法可以加{ },
如:
int test()
{
goto lable1;
//定义了变量,需加括号,否则报错
{
int i;
int m;
}
lable1:
run();
lable2:
return;
return;
}
注意一个坑,如果没有加return,将会继续执行所有lable,按顺序执行,这是容易忽略的
HI_S32 SAMPLE_VDEC_PIP(HI_VOID)
{
while(1)
{
s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
if(s32Ret != HI_SUCCESS)
{
goto END1;
}
s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
if(s32Ret != HI_SUCCESS)
{
goto END2;
}
continue;
END2:
SAMPLE_COMM_VDEC_Stop(u32VdCnt);
continue;//没有加return,将会继续执行下面退出,如果不想执行,需要加continue
END1:
SAMPLE_COMM_SYS_Exit();
return s32Ret;
}
}