C程序设计语言读书笔记:(四)函数与程序结构

1.函数的优点:
函数可以把大的计算任务分解成若干个较小的任务,不需要重新编写一些代码。使得整个程序结构更加清晰,并且降低修改程序的难度。
把不相关的细节隐藏在函数中,从而减少了不必要的相互影响的机会,并且函数也可以在其他程序中使用。

2.dummy() {}
这样的函数不执行任何操作也不返回任何值。可以在程序开发期间用以保留位置(留以以后填充代码)。如果函数定义中省略了返回值的类型,则默认为int类型。

3.程序可以看成是变量定义和函数定义的集合。

4.只要保证每一个函数不被分离到多个文件中,源程序就可以分成多个文件。

5.internal用于描述定义在函数内部的函数参数以及变量。

6.由于C语言不允许在一个函数中定义其他函数,因此函数本身是外部的。

7.默认情况下,外部变量与函数具有下列性质:
通过同一个名字对外部变量的所有引用(即使这种引用来自于单独编译的不同函数)实际上都是引用同一个对象(标准中把这一性质称为外部链接)。

8.外部变量比内部变量有更大的作用域和更长的生存期。

9.自动变量在函数内部使用,在函数被调用时变量开始存在,在函数退出时变量消失。
外部变量永久存在,值在一次调用到下次调用之间保持不变。
因此如果两个函数必须共享某些数据,而这两个函数互相不调用对方,最好把这些共享数据定义为外部变量,不作为函数参数传递。

10.main函数不需要了解控制栈的变量信息,它只进行压入和弹出操作。
可以把栈以及相关信息放在外部变量中,只供pop和push函数访问,而不能被main函数访问。

11.名字的作用域指的是程序中可以使用该名字的部分。对于在函数开头声明的自动变量来说,其作用域是声明该变量名的函数。不同函数中声明的具有相同名字的各个局部变量之间没有任何关系。

12.外部变量或函数的作用域从声明它的地方开始,到其所在的文件的末尾结束。

13.什么时候使用extern?
要在外部变量的定义之前使用该变量 或者外部变量的定义与变量的使用不在同一个源文件中,则必须强制使用extern。

14.外部变量的定义中必须指定数组的长度,但是extern声明则不一定要指定数组的长度。

15.外部变量的初始化只能出现在其定义中。

16.头文件问题
考虑到库的问题,把各个源文件单独存放到不同的文件中,在实际的程序中,它们分别来自于单独编译的库。当然我想说的是,这对于后期程序的维护是非常重要的,因为对于出现问题的模块,我们很容易就通过头文件很有组织的找到问题。

17.用static声明限定外部变量与函数,可以将其后声明的对象的作用域限定为被编译源文件的剩余部分。
通过static限定外部对象,可以达到隐藏对外部对象的目的。比如,getch-ungetch复合结构需要共享buf与bufp两个变量,这样子buf与bufp必须是外部变量,但这两个对象不应该被getch与ungetch函数的调用者所访问。还有,要将对象指定为静态存储,可以在正常的对象声明之前加上关键字static作为前缀。

18.函数声明为static类型,则该函数名除了对该函数声明所在的文件可见外,其他文件都无法访问。

19。static声明内部变量,不论其所在函数是否被调用,它一直存在。
也就是说,static类型的内部变量是一种只能在某个特定函数中使用但是一直占据存储空间的变量。

20.register声明告诉编译器,它所声明的变量在程序过程中使用频率较高。其思想是,将register变量放在机器的寄存器中,这样子可以使程序更小,执行速度更快。还有一点是无论寄存器变量实际上是不是存放在寄存器中,他的地址都是不能访问的!

  1. 在不进行显示初始化的情况下,外部变量和静态变量都将被初始化为0,而自动变量和寄存器变量的初值则没有定义。
    对于外部变量和静态变量,初始化表达式必须是常量表达式,且只能初始化一次。对于自动变量与寄存器变量,则在每次进入程序块时都将被初始化。
    对于自动变量和寄存器变量来说,初始化表达式可以不是常量表达式:表达式中可以包含任意在此表达式之前已经定义的值包括函数调用。

22.自动变量的初始化等效于简写的赋值语句。

23.递归——函数可以直接或间接调用自身。

24.数字是以反序生成的:低位数字先于高位数字生成。

25.文件名用引号引起来,则在源文件所在位置查找该文件。如果在该位置没有找到文件,或者如果文件名是用尖括号扩起来的,则将根据相应的规则查找该文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值