Skip to content

2.x - 小结与测试 - 函数与文件

章节回顾

  • 函数是一系列可以复用的语句,用来完成某个特定的任务。用户自己编写的函数称为自定义函数。
  • 函数调用是一种表达式,用于告诉CPU去执行一个函数。执行函数调用的函数,称为主调函数,被调用的函数称为被调函数。在调用函数的时候,不要忘记函数名后面的括号。
  • 函数定义时使用的花括号和和语句称为函数体
  • 具有返回值的函数称为带返回值的函数。返回值的类型指明了返回值的具体类型。return语句指定了要返回给主调函数的具体值。
  • 返回值是通过拷贝的方式返回给主调函数的,这个过程称为按值返回。如果以非空函数没有能够返回一个值,会导致未定义行为
  • main 函数的返回值称为程序的状态码。程序通过返回的状态码向操作系统表明程序是否成功执行。返回值为 0 时表示成功,返回正数则表示执行失败。
  • 践行 DRY 编程——”即不要重复你做过的事“。使用变量和函数来避免冗余代码。
  • 返回值类型为 void 的函数(2.3 - void 函数),不需要返回任何值给主调函数。这种类型的函数称为void 函数或无返回值的函数。Void 函数不能被使用在需要返回值的场合。
  • return 语句如果不是函数的最后一条语句,则称为提前返回return 语句会导致函数提前终止并立即返回主调函数。
  • 函数的形参也是变量,可以在函数中使用,它的值由主调函数提供。函数的实参指的是就是由主调函数传递给函数的具体值。当实参通过拷贝的方式传递给形参时,称为按值传递(pass by value)
  • C++ 并没有定义函数调用时,对实参的求值是从左向右还是从右向左。
  • 函数的形参和定义在函数体内的变量称为局部变量。变量存在的时间范围称为其声明周期。变量在运行时(即程序运行的时候)被创建和销毁。变量的作用域决定了它在哪里可以被访问,当变量可以被访问时,我们称其在作用域内。当它不可以被访问时,我们称其为不在作用域。作用域是一个编译时属性,即在编译时就会对其进行检查。
  • 空白符指的是哪些用来排版的字符,在C++中,包括空格、制表符和换行。
  • 前向声明(2.7 - 前向声明和定义)使我们可以在定义标识符之前,告知编译器该标识符存在。编写函数的前向声明,需要使用函数原型,包括函数的返回值类型、函数名和形参,但不需要函数体。
  • 定义(2.7 - 前向声明和定义)实际上实现了(对于函数和类型而言)或实例化(instantiated)了一个标识符。声明则是一条语句,用于告知编译器标识符是存在的。在 C++ 中,所有的定义都是声明纯声明指的是不具有定义功能的声明(例如函数原型)。
  • 大多数具有一定规模的程序都包含多个文件。(2.8 - 多文件程序
  • 如果两个标识符被引入了同一个程序使得编译器或链接器无法对其进行区分,则会导致编译器或链接器报告命名冲突命名空间2.9 - 命名冲突和命名空间)确保所有命名空间中的标识符都是独一无二的。std就属于命名空间的一种
  • 预处理器(2.10 - 预处理器简介)是一种用于在代码编译前对文件进行预处理的程序。预处理器指令#开头,以换行结尾。指的是一条将输入文本如何替换为输出文本的规则。
  • 头文件(2.11 - 头文件)指的是包含代码声明的文件。当使用 #include 指令时,它会把头文件的内容替换到该指令的位置。在包含头文件的时候,使用尖括号来处理系统头文件(例如C++标准库的头文件),使用双引号来处理用户自定义头文件。当使用系统提供的头文件时,使用不带.h后缀的版本(如果存在的话)
  • 头文件防卫式声明(2.12 - 头文件防卫式声明])可以避免头文件被多次包含到同一个文件中,但是不会避免它们被包含到多个文件中(每个文件只能包含一次)。