重点:
1.函数是一个命名了的代码块,函数可以有0个或者多个参数,通常产生一个结果。
2.一个典型的函数定义:①返回类型;
②函数名称;
③有0个或者多个形参组成的列表;
(形参以逗号隔开,形参列表在一对圆括号之内。)
④函数体。(包含函数执行操作)
3.通过调用运算符来执行函数,调用运算符的形式是一对圆括号,圆括号之内是一个用逗号隔开的实参列表,实参初始化形参。
4.调用表达式的类型就是函数的返回类型。
5.函数调用完成两项工作:⒜实参初始化函数的形参;
⒝将控制权转移给被调用函数;
(主调函数的执行被暂时中断,被调函数开始执行。)
6.return语句完成两项工作:
⑴返回return语句中的值(如果有的话);
⑵将控制权从被调函数转移回主调函数。
7.实参是形参的初始值,实参的类型必须与对应的形参类型匹配,因为函数的调用规定实参数量应与形参数量一致,所以形参一定会被初始化。
8.函数的形参列表可以为空,但是不能省略。不带形参,就写一个空的形参列表()隐式的,也可以用(void)显式的。
9.任意两个形参不能同名,而且函数最外层作用域中的局部变量也不能使用与函数形参一样的名称。
10.大多数类型都能用作函数的返回类型。但是,函数返回类型不能是数组类型或者函数类型,但是可以返回数组和函数的指针。(一种特殊的返回类型是void,它表示函数不返回任何值。)
11.C++中名字有作用域,对象有生命周期:
①名字的作用域是程序文本的一部分,名字在其中可见;
②对象的生命周期是程序执行过程中该对象存在的一段时间。
12.函数体是一个语句块,块构成一个新的作用域,可以在其中定义变量。
13.形参和函数体内部定义的变量统称为局部变量。
14.对于普通局部变量对应的对象来说,当函数的控制路径经过变量定义语句时创建改对象,当到达定义所在的块末尾时销毁它。
15.我们把只存在于块执行期间的对象称为自动对象,当块的执行结束后,块中的创建的自动对象的值变成未定义的。
16.形参是一种自动对象。
17.局部静态对象(STATIC):在程序的执行路径第一次经过对象定义语句时初始化,并且直到程序终止才被销毁,函数结束不会影响。
18.函数的名字必须在使用之前声明;函数只能定义一次,但是可以声明多次。(例外:若函数永远也不会被用到,可以只有声明没有定义)
19.声明与定义区别:函数声明无须函数体,用一个逗号“;”替代即可。
20.函数声明不包括函数体,所以无须形参的名字(可省略)。
21.函数声明也成为函数原型,包含了函数三要素(返回类型,函数名,形参类型)。
22.函数应该借鉴变量:在头文件中声明在源文件中定义。
23.含有函数声明的头文件应该被包含到定义函数的源文件中。
24.函数声明就像是函数定义的头部,比较简略,函数是用来调用的,如果函数定义部写到调用的位置后面,执行到调用位置,后面根本没执行就找不到了,当然报错了,就要在前面加声明,表示有这个函数,反之先写函数体,后调用声明就用不了,不在同一源文件,道理也是如此。
25.分离式编译:把程序分割到几个文件中去,每个文件独立编译。
26.大多数编译器提供了分离式编译每个文件的机制,这一过程通常会产生一个后缀名为.obj(Windows)或 .o(UNIX)的文件。(后缀名的含义是该文件包含对象代码)
27.一个编译的过程:
$ CC factMain.cc fact.cc # generates factMain.exe or a.out
$ CC factMain.cc fact,cc -o main # generates main or main.exe
(CC是编译器的名称,$是系统提示符,#后面是命令行下的注释语句。)
参考了C++ Primer Plus第五版中文版 P8
C++实现 源代码的扩展名
UNIX C、cc、cxx、c
GNU C++ C、cc、cxx、cpp、c++
Borland C++ Cpp
Microsoft Visual C++ cpp、cxx、cc