申明:我在5年前学过C,考过二级C,并取得“优秀”。后来就再也没有用过。我现在是重新学。所以,我的理解不一定是正确的。望斧正!
本文是在看《C语言程序设计——现代方法》第二章的笔记。
C程序的3个关键的语言特性
- 指令
- 函数
- 语句
指令
指令:在编译操作前修改程序的编辑命令。
这个指令
让我感觉这是将构建工具的部分职责加入到程序源代码中。因为像条件编译
这些指令做的事情,我个人觉得本应是构建工具的事情。
在编译C程序之前,预处理器会根据指令对C程序进行编辑。所有指令都是以#
开始的。
函数
函数:被命名的可执行代码块。
函数的超集就是C程序。函数分为两类:
- 程序员编写的函数
- 库函数(由编译器提供)
术语“函数”来源于数学。在数学中函数是一条根据一个或多个给定参数进行数值计算的规则。
C程序至少包含一个main函数。在执行程序时系统会自动调用main函数。main函数是一个程序的入口。main的名称是规定死的,且区分大小写。
疑问
为什么执行程序时系统会自动调用main函数?是因为C编译器编译时将main函数解析到纸带的开始处。纸带指老一辈程序员将代码打成有孔的纸带来执行。好心的同学能否解答下?
疑问
“函数(function)”和“方法(method)”这两个概念之间的区别又是?
语句
语句:程序运行时执行的命令。
语句的超集就是函数。语句必须以分号结束。为什么呢?因为语句可以连续占用多行,所以很难确定它的结束位置,因此用分号来向编译器显示语句的结束位置。
疑问
强制每条语句使用分号结尾,这是编译器不够智能还是?
变量和赋值
变量
变量:代表数据的存储空间。
程序一般会执行一系列的计算,因此需要在程序执行过程中有一种临时存储数据的方法。一种办法就是找一个地方
来存这些临时数据。这个地方
本质上是内存或磁盘等存储介质。但是我们程序员在写代码时总要考虑应该将这个临时数据存储到500G日立磁盘上的第2000还是第3000的位置上吧?这时,就建立起一个抽象概念:变量(variable)。变量实际就是存储介质的一块空间。在使用变量时,你不需要再考虑这个变量所映射到的介质空间在哪。而变量名则是给这个空间起一个名字,便于人阅读。与街道上的门牌号的作用类似。
类型
类型:用来说明变量所存储的数据的种类。通常我们说变量的类型,而不是说数据的种类
因为数据又分很多种:数字、字符、二进制……所以,就有了类型
的概念,而编译器根据类型来生成最终机器执行的机器码。如果类型不正确,生成的机器码执行起来当然会出问题。(个人凭感觉推理,不代表事实)。
类型会影响变量的存储方式以及允许对变量采取的操作。
声明
在使用变量之前必须对其进行声明,这也是为了便于编译器工作
疑问
为什么在使用变量之前一定要声明?如果编译器足够聪明,是不是不需要使用前申明?
声明变量的格式:变量类型 变量名
。如int height
,int为变量类型,height为变量名。
必须把声明放置在使用它的语句前:
main(){
声明
语句
}
赋值
赋值是一种动作即将数据存入存储介质中,也就是将数据存入变量中。
通常情况下,赋值运算的右侧可以是一个含有常量、变量和运算符的公式(也就是表达式,expression)。
初始化
变量所映射到空间不一定就是空的(用0来填满的)。很可能是已经存在数据的。按我之前的经验,如果初始化的成本不大,尽量对每个变量进行初始化。
我在看别人源码的时候,发现初始化有两种风格:
int height = 8, length = 12, width = 10;
int height = 8;
int length = 12;
int width = 10;
第一种更简短,第二种更可读。如何权衡看自己。
读入输出
为获取输入,使用scanf函数,输出时则使用printf。scanf和printf的字母f 都是“格式化”的意思。这两个函数都需要使用格式串来说明输入或输出数据的样式。就是指用户必须使用scanf规定的格式输入,否则会出错。而输出要按指定的格式输出就很容易理解了。
定义常量
常量(constant)是在程序执行过程中固定不变的量。
当程序含有常量时,建议给这些常量命名。这正是提高代码可读性的方法。
在C中定义常量需要使用指令
。这个指令就是宏定义(macro definition):#define。如:
#define CUBIC_IN_PER_LB 166
个人理解:宏定义就是在预编译期进行“替换”,所以,某个C文件中所有的“CUBIC_IN_PER_LB”标识符都会被替换为“166”。而“标识符”的含义在下一节说明。
注意:大多数C程序员都遵循的常量名规范是常量名都只用大写字母。
标识符
在编写程序时,需要对变量、函数、宏和其他实体进行命名。这些名字称为标识符(identifier)。
合法的标识符可以是字母、数字和下划线,但必须以字母或者下划线开头。标准C对标识符的最大长度没有限制。
C语言是区分大小写的。
关键字
有些词对编译器而言有特殊意义,这些词不能作为标识符来使用。这些词称为关键字(keyword)。
注意:某些词对某个编译器是关键字,而对于另一个编译器则可能不是关键字。
C语言程序的布局
这个就没有什么好说的,我觉得是编码规范问题。可以在团队层面或公司层面进行统一。在看过这篇文章前,我是不赞成统一编码规范。如果感兴趣,你也可以看看!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。