C语言的语法和结构总结

从大一开始学习C语言,到现在已经有很长时间了,C语言的中级学习应该算是结束了。本文是对C的总结,作为第一种认真学习的编程语言,希望在以后的学习中,能够越来越深入学习。相信在有C的基础之后,学习其他语言应该会变的容易很多,也会提高学习其他语言的速度。

本文对C的总结主要包括以下几个方面:

1、编译过程的总结;

从计算机程序员编写的C语言到机器能够识别的机器语言中间的过程可以理解为编译过程。编译过程实际上可以认为是一个“翻译官”。这个翻译官根据具体的编程语言会有所不同,比如汇编语言到机器语言的翻译官,Java语言到机器语言的翻译官等等都是有所不同的,一方面取决于程序员使用的编程语言,另外一方面取决于电脑本身的编译环境。

编译的过程可以这样理解:

一个C语言包含多个源文件组成,每个源文件有很多可读的文本组成,这些文本使用具体的编程语言。C编译器把每一个源文件翻译成机器语言,也就是计算机系统上执行程序所需要的指令。然后,将这些目标文件以及其他用于实现各种常用操作的称为库的目标文件链接起来创建一个可执行程序。

编译一个源文件一般包含以下三个阶段:

1)预处理

由于每个程序可能都包含一些头文件或者宏定义,因此C编译器用已有的代码替换源文件引用的文本,相当于用头文件或者宏中包含的内容去替换源文件中的头文件和宏定义。

2)词法分析和语法分析

词法分析是指编译器收集经过预处理的源文件中的字符以形成有意义的单元,语法分析是指检验源文件经过词法分析形成的单元是否符合C语言的的语法规则,或者句法规则。此外,语法分析还负责解释程序的意义,即语义。

3)生成代码

指的是将经过语法分析的程序翻译成机器语言。这一阶段对生成目标文件是必须的。

2、预处理器;

C语言的预处理器有两个最为常用的功能:定义常量和包含接口文件。所谓定义常量指的就是宏定义#define了,它的好处是方便程序员进行程序的调试修改,另外也可以简化比较长的变量表示。所谓接口文件指的是#include <文件名>和#include‘文件名’了。

这两种形式本质上是相同的。在任意一种情况下,预处理器都会寻找具有这个名称的文件,并将#include行替换为那个文件的完整内容。这两种形式的唯一区别是预处理器在不同地方搜索文件。如果文件在尖括号里,预处理器在特别为系统文件(如ANSI库)所保留的空间中搜索,也就是软件安装位置的文件夹中。如果文件名在双引号里,则预处理器会首先在用户控制的文件系统中寻找该文件(就是编程源文件的保存位置);如果未找到,预处理器才会继续检查系统文件。

3、词法结构;

词法结构主要包括空白、标识符、注释、常量、运算符和其他标点符号。

4、表达式和语句;

表达式是C语言是主要成分,也是实现函数等结构变量的主要方式。显然,对于表达式,运算符是其主要部分。

语句形式主要是简单语句、空语句和语句块。如果按照使用的关键字,又可以分为if语句、switch语句、while语句、for语句、break语句、return语句、do语句等等。

5、函数;

函数是C语言主要的执行语句,根据是否有返回值,可以分为函数和过程。函数定义、函数原型、函数接口等都有其写法和作用。就一个函数而言,在使用之前有这些是需要注意的。

首先如果是库函数,那么在引用库函数之前需要在源程序中包含头文件,并了解函数的接口,就可以直接使用了。

如果是用户自定义的函数,还要看是否写在用户自定义的头文件中,如果也定义在头文件中,那么使用法则和C自带的库函数是一样的。

如果只是用户在该源程序中定义的函数,那么在写函数之前需要先声明函数,包括函数返回值类型,函数调用值类型,注意函数声明需要在后面带上分号,然后就可以在源程序中写函数了。

有一点需要注意的是私有函数。除了那些通过接口输出给客户的函数以外,大多数模块也会定义一些只能在模块内使用的函数,要维持接口边界的完整性,最好将这些函数声明为该模块的私有函数。要做到这一点可以在它们的定义前面加关键字static。

6、声明;

在C语言中,在使用每一个变量前必须先声明才能使用,包括局部变量、全局变量等。可参照: https://blog.csdn.net/zhanshen112/article/details/80251732

7、数据类型;

C语言的数据类型包括原子类型,结构类型和抽象类型。可参照:

https://blog.csdn.net/zhanshen112/article/details/80265830

https://blog.csdn.net/zhanshen112/article/details/80279847

8、ANSI库


猜你喜欢

转载自blog.csdn.net/zhanshen112/article/details/80298255