C语言教程-1_2-关键概念
PS:本文章参考自C primer plus。
编程机制
生成程序的具体过程根据语言和操作系统的不同。C语言是可移植性语言,可以在多种不同的环境下使用,包括UNIX,Linux,MS-DOS,Windows,Macintosh OS等。
本系列文章基本只关心不同环境所共有的部分,至于一些不同环境的不同处理,会特别指出。
事实上,就学习C语言而言,我们无需理会编程机制,但是了解一下这方面的知识,对于学习/理解C程序有着莫大的帮助。
目标代码文件,可执行文件和库
C程序在生成过程中会有许多中间文件的生成,这里简单讲解一下最基本的过程。
首先,预处理器将源代码文件(.c
)进行预处理,即对 预处理指令
的操作,包括头文件展开,宏定义展开等,处理后的文件仍然是纯文本(.i
);
然后,编译器对处理后的源代码进行编译,编译结果为汇编程序(.s
),仍然是纯文本;
汇编器负责从汇编代码到二进制程序的转换,结果为 可重定位目标代码文件
,从这个(这些)文件(.o
)开始就是二进制程序了,但是并不能在操作系统上直接运行,因为它还缺少 启动代码
等信息:
目标代码文件
缺少启动代码
,有了对应操作系统特定的启动代码,目标代码才能被正常地处理运行;目标代码文件
还缺少库函数,几乎所有的C程序都需要使用到C标准库中的函数,例如printf()函数的使用等,这些函数是C语言标准库已经写好的,我们只需要将他们包含进去即可,这些信息都存放在相应的库
文件中,库
中包含有许多函数的目标代码
。
最后需要进行 链接
操作,链接器的作用是,将用户的目标代码和库代码,以及操作系统绑定的标准启动代码整合到一起,最终生成的二进制文件才是我们能够运行的程序。
---WAHAHA,2025.2.6
# C代码的基本要素我们在上一篇文章已经讲解了一个最基本的完整C程序的各个组成部分了,这里要进一步进行描述。
我们可以看到,在C代码中,有着各式各样的字符,不仅有标点符号,还有数字,字母,他们的排列构成各个标识符
,指令
,数据
等等。对于这些内容,有着一些最基本的规范。
字符集
C语言基于英文字符进行编写,正常来说,我们所有需要使用到的字符,都可以在我们日常使用到的键盘上找到(不使用任何输入法),也就是说,无论是我们拼写的变量名,还是各个指令,亦或是运算符,都需要使用英文字符去组成,而我们的中文字符,中文汉字,或者是其他国家的各种字符,从规范的角度,都不应该出现(字符串除外)。
因此必须要注意的是,对于变量名等标识符
,我们应该只使用英文字母(和其他C语言允许的英文字符)进行构成;
对于运算符等符号,我们只能使用英文的标点符号,而且不同于标识符
,这里是硬性要求,绝对不能使用除英文字符以外的字符—除非你想在你的程序里翻来覆去半天看不出问题。
所以,在编写程序时,为了您和电脑的健康和安全,请务必关闭中文输入法!(除非你要输入一个中文的字符串)
标识符的命名规范
我们来看一下标准中对标识符
的定义:
说人话就是,各种我们能自己命名的玩意都是标识符。doge~
其中就包括变量名,函数名等。
关于标识符
的命名方式,有一些要求:
1 | 1 标识符必须以字母a-z、 A-Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中 |
这里说的关键字
,在下面说明。
关键字和保留的标识符
关键字
关键字就是构成C语言的关键词,由它们构成C的语法体系,所以,这些词语是不能够被使用做标识符名称的。
具体见:https://zh.cppreference.com/w/c/keyword
主要的是这些:


其他还有很多,大部分是新标准引入的,我们暂时也用不到,这里就不放图了。
保留的标识符
我们直接看标准的描述,这里放一张最基本的要求,实际上我们先记住,自定义的标识符不能和关键字重名。
—WAHAHA,2023.9.30
C语言的相关文件类型
源文件
源文件即C的源代码文件,以后缀.c
结尾,我们编写的一般代码,包括函数定义等,都放在源文件中:

头文件
我们在编写程序时,往往要使用到很多的外部库,用以支持更多的功能,例如C语言默认的标准库,或者是我们自己编写的库,再或者是第三方开发者写好的库。
这些库中包含有许多的已经写好的函数等内容,我们往往找不到他们的源文件,因为他们一般是编译好的动态库文件,没有源代码,这时候,我们需要使用头文件来引入库中的各种声明,例如一些函数的声明,常量的声明,宏的定义
,他们往往都在头文件当中。我们只需要使用#include
指令来在我们的源文件中引用该头文件,就可以使用对应的函数了:

其他中间文件
编译器在编译过程中会生成一些中间文件,例如.s汇编文件,.o目标文件等等,我们暂时无需理会。
另外,不同的软件有着各自管理C语言工程的方式,他们往往会在项目文件夹下生成各种各样的文件,他们并不是C标准使用的文件,而是软件特定生成的文件,用于管理项目。例如VS会生成.sln文件
,VC++6.0会生成.opt文件
等等。
目前,我们仅仅需要关心.c源文件和.h头文件这两种文件即可。
---WAHAHA 2023.11.07
上一篇:c语言教程-1_1-什么是程序
下一篇:c语言教程-2-环境搭建