1.1C语言概述
1.1.1什么是C语言
我们在日常生活中,用来交流的语言有很多种,最常见的有,汉语,英语,日语,法语等,这些语言都有它们特有的,语法格式和词汇,但是本质上都是用于人与人之间相互交流,传递信息的。
那么我们通过固定格式和语法的“语言”与人交流,同样也可以用“语言”于计算机交流,通过与计算机的信息交互,让它来为我们做事情的,那么这样的语言我们称之为计算机语言,也叫做编程语言,而C语言就是,编程语言的(Programming Langguage)一种。
编程语言用来控制计算机的一系列指令(Instruction),它就像我们人类的语言一样,有固定的格式和词汇(不同编程语言有不同的格式和词汇),在使用编程语言和计算机交流的过程中,我们必须严格的遵守它的格式和词汇,不然就会出现错误,就像我们人与人间之表述不清楚一样,同样,人在做事情当中也会出现错误,从而达不到工作的目的。
同时和人类一样计算机的语言种类也非常之多,它们做应用的领域页不尽相同,总的来说可以分为三大类:
1.机器语言
2.汇编语言
3.高级语言
机器语言:机器语言是指一台计算机的指令集合,电子计算机使用的是“0”和“1”组成的二进制数。二进制数是计算机的语言的基础。计算机发明之初,人们写出了一串串由“0”和“1”组成的指令序列,交由计算机执行。这种只有计算机才能识别的语言我们成为机器语言,即第一代机器语言。
汇编语言:为了减轻使用机器语言的困难,人们对机器语言进行了一次改良,对机器语言做了一次封装,即用一些简洁的英文字母来代替一个特定指令的二进制串,比如用“add”代表加法,“sub”代表减法。计算机语言就有原来的晦涩难懂的二进制数,变成了一个个,可以看的东的英文字母,这样就极大的降低了计算机语言的学习难度,以及开发难度,同时效率提高了,纠错和维护也变得简便,快捷。这种计算机语言我们称之为汇编语言,即第二代计算机语言。
高级语言:那么随着科学的不断发展,逐渐的,汇编语言在面对这个高速发展的社会,也变得不再那么高效。为了进一步的提升生产效率,人们又在原来的基础上发明了高级语言(相对于机器语言和汇编语言而言),它是最接近自然语言和数学公式的编程语言,基本脱离了计算机的硬件系统,用人们更为理解的方式来编写程序。用高级语言编写的程序成为源程序。高级语言不是指某一特定的具体语言,而是包括多种编程语言,这其中包括。Java,python,C,C++,C#等。
1.1.2C语言的特点优势
学习C语言呢,不仅能让你了解与编程相关的概念,还能够,让你明白程序的运行原理,比如计算机的各个部件是如何进行交互的,程序在内存中是一种怎样的状态,操作系统和用户之间有着怎样的关系,等等。
许多语言都是基于C语言开发的,可以说C语言是现代编程语言的“开山鼻祖”,那么C语言究竟有哪些独特的魅力呢?
1.,语言简洁紧凑,使用方便
2.运算符丰富
3.数据类型丰富
4.表达方式灵活
5.允许直接访问物理地址,对硬件进行操作
6.生成的目标代码质量高,程序执行效率高
7.可移植性高
8.表达力强
1.2认识C语言编译环境
目前市场上提供了两种主流的C语言编译软件
1.vsual C++6.0
2.Dev-C++
1.3编写一个简单的程序
【例】在屏幕上输出“同学们,大家好!”(注意:所有标点符号均为英文)
实现步骤如下
步骤1:新建文件
打开Dev-C++后(这里以Dev-C++为例),在菜单栏依次选择[文件]——[新建]——[源代码]
步骤2:编写程序代码
在代码编译区域输入下面代码:
#include <stdio.h> //预处理命令,包含基本输入输出头文件
int main() //函数值为整型的主函数
{ //函数的开始
printf("同学们,大家好!\n"); //输出函数,\n表示换行,C语言语句结束要在结尾加上分号
return 0; //函数返回值
} //函数结束
步骤3:保存文件
编写完成之后选择[文件]——[保存],将会弹出“保存为”对话框,在该对话框中可为文件选择保存路径,并设置文件名和保存路径
步骤4:编译程序
在菜单栏选择[运行]——[编译],程序编译结果显示在编译信息显示区,显示“-错误:0”,“-警告:0”表示程序可以运行。
步骤5:运行程序
在菜单栏选择[运行],程序就可以在弹出的运行框内正常运行了
【代码分析】
代码中的main是主函数的函数名,表示这里使用一个主函数,每一个C语言程序由且仅有一个主函数(main函数)。printf函数的功能是把要输出的内容送到屏幕上显示。printf函数是一个由系统定义的标准函数,可在程序中直接调用。语句“return 0;”表示程序的正常结束。(c语言中return0的含义:1、返回值int类型的函数返回:return语句用来结束循环,或返回一个函数的值。return0:一般用在主函数结束时,按照程序开发的一般惯例,表示成功完成本函数。)
1.4C语言的编译过程
C语言作为高级语言,程序源代码无法被计算机直接识别。从程序源代码文件(*.c)到可执行文件(*.exe)需要经过预处理,编译,汇编,链接四个过程,如图
1.4.1C语言编译过程分析
1.预处理
预处理操作主要处理代码中以“#”开头的预处理语句,预处理完成后,会生成预处理文件(*.i)。
预处理操作主要包括以下几项。
(1)展开所有的宏定义(#define),进行字符替换。
//宏定义又称为宏代换、宏替换,简称为宏。
是 C 语言中最为常用的三种预处理指令之一。
宏定义指令,是由 # 和关键字 define 组合而成的。
它的作用是文本替换,使用标识符来代替替换列表中的内容。
使用宏定义可以提高程序的通用性、易读性,
减少因为输入错误产生的各种问题,同时还便于修改。
(2)处理所有条件编译指令(#ifdef,#ifndef,#endif)
//一般情况下,C语言源程序中的每一行代码都要参加编译。
有时候出于对程序代码优化的考虑,希望只对其中一部分内容进行编译,
此时就需要在程序中加上条件,让编译器只对满足条件的代码进行编译,
将不满足条件的代码舍弃,这就是条件编译
(3)处理条件包含语句(#include),将包含的文件直接插入语句所在处。
(4)删除所有注释。
(5)添加行号和文件标识,以便在调试和编译出错时快速定位到错误所在行。
2.编译
编译操作对预处理文件进行词法分析,语法分析,语义分析后生成汇编文件(*.s)。
3.汇编
汇编操作是指将生成的汇编文件(*.s)“翻译”成计算机能够识别的二进制文件。在linux系统当中的二进制文件是(*.o)的文件,在Windows系统中的二进制文件是(*.obj)文件。
4.链接
生成二进制文件后,文件尚不能运行,若想运行文件,需要将二进制文件于代码中用到的库文件进行绑定,这个过程成为链接。链接操作完成后将生成可执行文件。
什么是库文件,库文件有什么作用
库文件是一类计算机上的文件,它们提供了预制的变量、函数或类,以便于开发者能够复用这些功能而无需重新编写。库文件可以分为静态库和动态库两种类型:
-
静态库:在编译阶段,静态库的文件内容会被复制到最终的 executable(可执行文件)中。这意味着静态库的内容不会被重复加载,因为它是预先构建并包含在可执行文件内的。静态库的使用可以提高程序的可移植性和独立性,但它会增大可执行文件的大小。
-
动态库:与静态库不同,动态库通常不会在编译后被复制到可执行文件中。而是在程序运行时,由操作系统动态加载到内存中。这样,不同的程序可以通过相同的动态库文件共享相同的数据和函数,从而减少内存占用并方便模块化的更新。动态库的使用有助于优化内存管理,并且由于它们可以被多个程序共享使用,可以减少每个程序所需的单独库文件的数量。
库文件的另一个用途是在配置管理系统如Codesys中,它们可以用来存储可多次使用的程序组织单元(Program Unit, PU)。这些PU可以是用户自定义的功能块、函数或程序,它们可以在不同的项目之间复制和使用,从而提高了编程效率。
总结来说,库文件的作用主要包括:
- 提供预制的代码片段,允许开发者复用代码。
- 通过静态链接或动态链接,使代码能够在不增加额外可执行文件大小的情况下被访问。
- 简化代码维护和升级过程,通过共享资源实现高效的开发环境。
- 在某些情况下,如Codesys配置管理系统中,库文件还用于存储和管理可重用的程序组织单元。