函数是大多数编程语言中的一种代码单元,返回值是函数的出口,一般情况下,返回值的形式主要有三种:常量、变量、复合表达式。出于易读性、可移植性、可靠性等多方面同代码质量相关方面的考虑,在有些编码规则集中有规则要求返回值不能为复合表达式,而在剩下的两种形式中,“常量”返回值也是不恰当的。。
返回值作为函数的出口数据,一般是存储的是函数处理的结果,或者是函数处理的状态,如果函数处理的结果或者函数处理的状态是一常量的话,那自然会令人提出以下问题:这个函数处理的意义是什么呢?
有人会快速的回答说:我通过全局变量或者是参数将处理结果传出去了。为了聚焦讨论的问题,在文中不讨论数据传递方式。可即使是通过其它方式传出了处理结果,那为什么不将返回值定义为void呢?有无返回值不论对于编译链接的效率、还是程序的执行效率以及代码的易读性等诸多方面都是有区别的,看似微小,但的确带来了没有意义的负担和风险。
另外有些人会回答说:我可以返回多个不同的常量呀。如示例代码中fun_1所示。是的,这种形式的代码无论是在大学课堂上,还是在军工产品中不罕见。但是,如果从代码质量的角度来看,fun_1显然存在两个出口,这违反了结构化设计的原则,关于结构化设计本文不多讨论。另外,对于程序员来说,相对于fun_2,编写fun_1的过程更容易出错,尤其是return语句较多的时,程序员更容易忘记录入某条return语句,原因很明显,fun_2的形式化程度要比fun_1强。
int fun_1(int n_p_1)
{
if(n_p_1>0)
{
return 1;
}
else
{
return 2;
}
}
int fun_2(int n_p_1)
{
int n_ret;
if(n_p_1>0)
{
n_ret=1;
}
else
{
n_ret=2;
}
return n_ret;
}
既然是在单值得情况下函数返回值类型应定义为void,存在多值的时候在函数结尾处返回一个变量更为恰当,那么一般情况下,应该要求函数的返回值不能为常量。