请教C语言函数中有多个return的安全隐患?
在著名的Misra C编码标准里,有这么一条规则:
A function shall have a single point of exit at the end of the function.
也就是说,一个函数只能在函数的末尾出现一个出口,如果在一个函数中使用多个return是不允许的。如下面的例子是不允许的:
int function(parameter list)
{
If(expression1)
{
Statement sequence;
return code_1;
}
If(expression2)
{
Statement sequence;
return code_2;
}
If(expression3)
{
Statement sequence;
return code_3;
}
return code_4;
}
需要改成:
int function(parameter list)
{
If(expression1)
{
Statement sequence;
Return_val= code_1;
}
If(expression2)
{
Statement sequence;
Return_val=code_2;
}
If(expression3)
{
Statement sequence;
Return_val=code_3;
}
return Return_val;
}
请教各位大虾,C语言函数中有多个return有什么安全隐患?我觉得没什么啊。。。 安全 C 标准 编码 函数
[解决办法]
某一天另一个人要修改你的函数,在函数开头加了一些准备工作,然后在函数结束时加了一些清理工作……
[解决办法]
中途return有点违反结构化原则而已,编译器知道自己要怎么return,单步调试代码你肯定发现,不管在哪return,下一句肯定是停留函数体结束的那个大括号 }上面
[解决办法]
c语言中,遵循这样的原则可以统一处理资源回收以减少冗余代码,减少出错的可能性。 在C++中,常用RAII(Resource Acquisition Is Initialization, 资源获取就是初始化)的手法。