我的主力博客:半亩方塘
函数与程序结构
1、如果函数不需要返回值,则应该用 void
定义函数的返回值类型,同时 return
语句后不再需要任何表达式
2、对函数接口加以注释说明
/* 函数功能: 实现...功能
函数参数: 参数1,表示...
参数2,表示...
函数返回值: ...
*/
3、printf
和 scanf
是采用 变长变量表 定义的函数,所以变量的个数不固定
4、局部变量在定义时不会自动初始化,除非程序员指定初值
5、全局变量在定义时会自动初始化为 0,在定义点之前或者在其他文件中引用时,应该进行如下声明:
extern 类型名 变量名;
不推荐使用全局变量,因为谁都可以改写全局变量,所以很难确定谁改写了它
6、变量的存储类型指的是数据在内存中存储的方式,即编译器为变量分配内存的方式,它决定变量的生存期
- 动态存储
根据需要 临时 分配存储空间,离开即释放(形参、自动变量、函数调用的现场等)
- 静态存储
在程序 运行期间 分配 固定 的存储空间不释放(全局变量、静态变量)
7、自动变量:进入语句块自动申请内存,退出时自动释放内存。标准定义格式为:
auto 类型名 变量名;
缺省的存储类型,不初始化时,值是不确定的
8、一个函数的内部变量在函数退出后失效,再次进入函数,变量值重新初始化,把此变量定义为 static
,则变量的值可以保存到下次进入函数
static int i;
这种变量称为静态变量。
静态变量和全局变量都是静态存储类型
+ 自动初始化为 0 + 从静态存储区分配,生存期为整个程序运行期间 + 作用域不同
9、使用频率比较高的变量声明为寄存器变量(register
),可以使程序更小、执行速度更快
- register 类型名 变量名;
-
register int i;
现代编译器有能力自动把普通变量优化为寄存器变量,并且可以忽略用户的指定,所以无需特别声明变量为register
10、几个有关联的函数需要使用全局变量时,全部变量应和访问全部变量的函数放在单独的文件中,与其他文件分别编译,并且将该全局变量声明为 static
(静态全局变量)
尽量少用静态局部变量,以避免函数具有“记忆”功能
11、模块和链接
将一个程序分解成若干个模块,分别放在几个源文件中,形成一个项目,然后对每一个源文件分别单独进行编译,再将它们的目标代码连同标准函数库中的函数链接在一起,形成可执行文件,模块之间通过互相调用函数和共享全部变量联系起来,头文件是联系的纽带,头文件里对全局变量的声明要加上 extern
关键字,用以说明该变量为外部变量