C语言基本概念

来源:互联网 发布:淘宝店招图片素材 编辑:程序博客网 时间:2024/04/29 02:46
 

计算机语言与人类语言一样,都是一种交流的工具。人类语言是人与人之间交流的工具,计算机语言是人与计算机之间交流的工具。所有语言的都有它的语法、语素和语用;都有它的语法规则,这样才能被交流的双方相互理解;计算机语言也不例外,我们编写的计算机程序也必须遵守一定的语法规则,才能被编译器所识别,最后翻译成能被CPU理解执行的机器语言,其中机器语言是CPU厂商设计的。

1.   计算机语言相关概念解释

①    编译程序:编译程序又称为编译器,是一个语言翻译程序,它把源语言翻译成目标语言。源语言主要指各种计算机语言,目标语言主要指CPU能识别的机器码。例如英语翻译成汉语的过程中,翻译官相当于编译器。

②    编译:编译源语言,生成目标代码并形成机器码的过程,相当于现实翻译中的笔译。C语言属编译型语言。

③    解释:边把源语言解释成机器码边执行的过程,相当于现实翻译中的口译。Shell脚本属解释型语言。

④    编译阶段:编译阶段包括词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成六个阶段,贯穿始终的功能模块有表格管理和出错管理。

⑤    为什么需要编译程序:就象我们母语是汉语,想与一个埃及人交流一样,但我们不懂埃及语,如果有一个自动语言翻译机(或翻译官),双方的交流才能变得流畅。由于CPU指令是二进制指令,人们难以在此基础上进行有效编程,所以发明了各种各样的计算机高级语言,然后通过编译器把人们编写的计算机高级语言程序翻译成CPU能理解的二进制指令。

⑥    程序:通常指的是人们编写的计算机语言源代码和编译后的执行码,其中源代码称为源程序,执行码称为执行程序,程序是静态的。程序相当于一个企业行政部门出台的行政管理文件。

⑦    进程:程序的一次执行过程,进程是动态的。进程相当于企业各部门拿着行政管理文件的执行过程。

⑧    CPU:CPU主要与内存通信,其主要功能有解释指令、存数据到内存、从内存取数据、数据计算和中断处理,CPU最突出的功能为解释指令和数据计算。CPU的工作是从内存中取出指令并完成指令的自动化执行。

⑨    内存:内存是存放电脑工作数据的空间,断电后数据丢失。内存的最小单位为字节,内存每一个最小单位空间都有其编号(即内存地址),CPU是通过内存地址访问内存数据。在内存看来,内存里存放的数据都是平等的,都是一串串二进制字符,没有类型,也没有含义,是计算机程序把内存的数据赋予特别的类型和意义。

⑩    变量:一段内存空间的抽象,变量类型决定了变量存放内存空间的大小。计算机语言编译成机器码后,变量相对于内存的操作就转变为对相应内存地址的存取操作。直接存取是一般变量,间接存取是指针变量。C语言变量原则为先定义,后使用。

⑪    机器程序:经过编译器编译后形成CPU能理解的机器指令。在机器程序中,只有内存地址,没有变量概念;机器程序中所有变量失去意义,变量的操作都会转换成对内存地址的存取操作。机器程序有如下几种类型的操作:CPU的计算操作、内存空间的申请与释放、CPU把寄存器数据存到内存、取内存数据到CPU寄存器、内存数据从一片空间复制到另一片空间、中断操作等。

⑫    Linux系统编译方法:gcc(或cc) a.c(源代码名称) -o  a(执行码)。在这里a.c和a都是程序,其中a.c为源程序,a为可执行程序。在界面上输入 ./a,a就开始了执行之旅,其执行过程称为进程。

2.   C语言数据类型种类

图4-1画出了C语言数据类型种类,在C语言中只允许使用下面这些数据类型。

图4-1  C语言数据类型种类

3.  32个关键字

C语言有如下32个关键字,这些关键字由系统定义,不能重新作为其他定义。

auto   break   case     char  const   continue   default  do    double else   enum   extern   float    for    goto   int   long  register return  short  signed   sizeof   static  struct  switch  typedef  unsigned  union   void    volatile    while

4. 9种控制语句

C语言控制语句的功能是完成程序流程的控制,C语言有如下9种控制语句。

①    if( )-else(条件语句)

②    for( )(循环语句)

③    while( )(循环语句)

④    do-while( )(循环语句)

⑤    continue(结束本次循环开始下一次循环语句)

⑥    break(跳出switch或循环语句)

⑦    switch(多分支选择语句)

⑧    goto(跳转语句)

⑨    return(从函数返回语句)

5.  C程序格式和结构特点

C语言习惯用小写字母,大小写敏感;不使用行号,无程序行概念;可使用空行和空格;常用锯齿形书写格式。

下面以一个实例说明C语言结构特点。

/* example1.1   The  first  C  Program*/           注释

#include <stdio.h>          编译预处理

main()          函数

{

        printf(“Hello,World!”);         语句

}

C语言由函数、语句和注释三个部分组成,这三部分的说明和要求如下。

(1)函数与主函数

一个C语言源程序可以由一个或多个源文件组成。每个源文件可由一个或多个函数组成。一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。

源程序中可以有预处理命令(include命令仅为其中的一种),预处理命令通常应放在源文件头。

每一个说明,每一个语句都必须以分号结尾。但预处理命令,函数头和花括号“}”之后不能加分号。

标识符、关键字之间必须至少加一个空格以示间隔,若已有明显的间隔符,也可不再加空格来间隔。

(2)程序语句

C程序由语句组成,用“;”作为语句终止符。

{}表示一个语句的整体。if、for、while包含多条语句时需要用{}括起来表示一个整体,单条语句则可直接用“;”表示语句终止。

(3)注释

/*  */为注释,不能嵌套,注释不产生编译代码。

6.  C语言程序的开发过程

编辑       编译(预编译、编译、链接)      形成执行码      执行

7.  书写C语言程序时应遵循的规则

一个说明或一个语句应该占一行。

用{}括起来的部分,通常表示了程序的某一层次结构。{}一般与该结构语句的第一个字母对齐,并单独占一行。

使用缩进方式编程,低一层次的语句比高一层次的语句缩进若干空格后书写,以便看起来更加清晰,增加程序的可读性。

有足够的注释。有合适的空行。

8.  C语言的字符集

字符是组成语言的最基本的元素。C语言字符集由字母、数字、空格、标点和特殊字符组成。在字符串和注释中还可以使用汉字或其他可表示的图形符号。

 (1)字母

小写字母a~z共26个,大写字母A~Z共26个。

 (2)数字

0~9共10个。

 (3)空白符

空格符、制表符、换行符等统称为空白符,空白符只在字符常量和字符串中起作用。在其他地方出现时,只起间隔作用,编译程序对它们忽略不计。在程序中适当的地方使用空白符将增加程序的清晰性和可读性。

(4)标点和特殊字符

包括“,”、“;”等标点和“[”、“]”、“*”等特殊字符。

9.  C语言词汇

在C语言中使用的词汇分为六类,分别为标识符、关键字、运算符、分隔符、常量和注释符,具体说明如下。

(1)标识符

在程序中使用的常量名、变量名、函数名等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下画线(_)组成的字符串,并且其第一个字符必须是字母或下画线。

a、x、x3、BOOK_1、sum5这5个标识符是合法的标识符。

 以下标识符是非法的:

    3s      以数字开头。

    s*T     出现非法字符*。

(2)关键字

关键字是由C语言规定的具有特定意义的字符串,通常也称为保留字,用户定义的标识符不应与关键字相同。C语言的关键字分为以下几类:

①    类型说明符

用于定义、说明变量、函数或其他数据结构的类型,如int、double等。

②    语句定义符

用于表示一个语句的功能,如if~else就是条件语句的语句定义符。

③    预处理命令字

用于表示一个预处理命令,如include。

(3)运算符

C语言中含有相当丰富的运算符。运算符与变量,函数一起组成表达式,表示各种运算功能。运算符由一个或多个字符组成。

(4)分隔符

在C语言中采用的分隔符有逗号和空格两种。逗号主要用在类型说明和函数多个形参中分隔各个变量,空格多用于语句各单词之间作间隔符。

(5)常量

C语言中使用的常量可分为数字常量、字符常量、字符串常量、符号常量、转义字符等多种。  

(6)注释符

C语言的注释符是以“/*”开头并以“*/”结尾的串,在“/*”和“*/”之间的即为注释。程序编译时,不对注释作任何处理,注释可出现在程序中的任何位置,注释是用来向用户提示或解释程序的意义。

10.C语言算法

    C语言是结构化设计语言,结构化程序的灵魂是算法。瑞士Niklaus Wirth教授在20世纪60年代提出了“数据结构+算法=程序”的公式。做任何事情都有一定的步骤,为解决一个问题而采取的方法和步骤,就称为算法。算法具有有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性等特征。C语言算法是通过结构化设计方法来实现,其特点为自顶向下、逐步细化、模块化设计和结构化编码。

11. C语言编译过程

图4-2画出了C语言的编译流程。

图4-2 C语言编译过程

12. 计算机语言说明

数学是描述大自然的语言,会计是人们记录商业活动的语言,人类语言(英语、汉语、法语、西班牙语等)则是人与人之间交流的语言,计算机语言是人们和计算机(CPU)交流的语言。

由于CPU只能理解机器语言(CPU指令集),而人们对机器语言(一串二进制数)很难阅读和调式,于是就产生了汇编语言。汇编语言的特点是利用助记符代替相应的机器语言二进制指令,如利用“ADD”助记符代替二进制指令“1000001100000110”,汇编语言较机器语言更有利于人们编程,人们编写的汇编源程序再经汇编编译器翻译成机器语言程序(执行码),执行码就是CPU能理解的二进制指令。

由于汇编语言是面向机器的低级语言,与CPU的指令集息息相关,是按CPU的“思考”方式编写而成的计算机语言。汇编语言与人类思考方法相差较大,于是产生了面向过程的语言(PASCLE、C等)和面向对象的语言(C++、JAVA等)。但是计算机只能理解机器语言(CPU指令集),人们编写的C语言、C++语言、JAVA语言源程序要翻译成机器语言CPU才能够执行,执行翻译工作的是编译程序。就这样是一门新的计算机学科(编译原理)产生了,编译原理介绍了编译程序的实现方法。masm是汇编的编译程序,gcc是Linux下C语言和C++语言的编译程序,JVC是JAVA的编译程序。

万物皆流,万物归宗。计算机源程序,无论是高级语言C、C++、JAVA源程序,还是汇编语言源程序,最终都要翻译成机器语言,CPU才能够执行。

 

摘录自《深入浅出Linux工具与编程》