C语言之基本概念

原创
2014/05/26 15:32
阅读数 87

申明:我在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语言程序的布局

这个就没有什么好说的,我觉得是编码规范问题。可以在团队层面或公司层面进行统一。在看过这篇文章前,我是不赞成统一编码规范。如果感兴趣,你也可以看看!

展开阅读全文
打赏
0
2 收藏
分享
加载中
打赏
0 评论
2 收藏
0
分享
返回顶部
顶部