14使用函数时要特别考虑的问题

一. 使用函数时要特别考虑的问题

​ 现代的编程语言,如C++、Java、Visual Basic等,都同时支持函数和过程。函数是指由返回值的子程序;过程是指没有返回值的子程序。在C++中,通常把所有的子程序都称为函数;然而,那些返回值类型为void的函数在语义上其实就是过程。

1. 什么时候使用函数,什么时候使用过程

​ 语言纯化论者认为,一个函数应该只有一个返回值,就像数学函数一样。这意味着函数值能接受仅用于输入的参数,并只通过函数本身返回一项结果。函数用于应该以它返回的值来命名,就像 sin()、CustomerID()、ScreenHeight()、一样。在另一方面,过程则可以根据所需,接受任意数量的输入、修改和输出参数。

​ 一种常用的编程实践是让函数像过程一样执行并返回状态值。逻辑上,这种东西的工作方式和过程一样,但是由于具有返回值,它又确实是一个函数。

outputStatus = report.FormatOutput(formattedReport)
if(outputStatus == Success)
{   
}

​ 简而言之,如果一个子程序的主要用途就是返回由其名字所指明的返回值,那么就应该使用函数,否则就应该使用过程。

2. 设置函数的返回值

​ 使用函数时总存在返回不正确的返回值的风险。当函数内有多条可能执行路径,而其中一条执行路径没有设置返回值时,这一错误就出现了。为了减少这一风险,请按照下面给出的建议来做。

(1) 检查所有可能的返回值

​ 在编写函数时,请在脑海里执行每一条执行路径,确保在所有可能的情况下该函数都会有返回值。在函数开头用一个默认值来初始化返回值是个很好的做法——这种方法能够在未正确地设置返回值时提供一张保险网。

(2)不要返回指向局部数据的引用或指针

​ 一旦子程序执行结束,其局部数据就都出了作用域,那么任何指向局部数据的引用或指针也随之失效。如果一个对象需要返回有关其内部数据的信息,那就应该把这些信息保存为类的数据成员。然后,它还应该提供可以返回这些数据成员的访问器子程序,而不是返回对局部数据的引用或者指针。

二. 宏子程序和内联子程序

1. 把宏表达式整个包含在括号内
2. 把含有多条语句的宏用大括号括起来
3. 用给子程序命名的方法来给展开后代码形同子程序的宏命名,以便在需要时可以使用子程序来替换宏
posted @ 2019-03-15 08:58  洛克十年  阅读(202)  评论(0编辑  收藏  举报