C语言中级培训-1-C语言回顾_第1页
C语言中级培训-1-C语言回顾_第2页
C语言中级培训-1-C语言回顾_第3页
C语言中级培训-1-C语言回顾_第4页
C语言中级培训-1-C语言回顾_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言中级培训语言中级培训一、一、C语言回顾语言回顾 2 “中级中级”要解决的问题要解决的问题 在大学所学的在大学所学的C语言是基本知识和基本概念。语言是基本知识和基本概念。 学习基本知识和基本概念,告诉我们学习基本知识和基本概念,告诉我们C语言有语言有些什么、能干什么,却没告诉我们何时使用什些什么、能干什么,却没告诉我们何时使用什么、为何必须这样用、如何去组合它们。么、为何必须这样用、如何去组合它们。 过去学的东西告诉你如何让所写的程序通过编过去学的东西告诉你如何让所写的程序通过编译;而中级培训是告诉你如何避开虽通过了编译;而中级培训是告诉你如何避开虽通过了编译但仍存在的错误。译但仍存在的错

2、误。 这明显是两个层次的问题。这明显是两个层次的问题。“中级中级”就是要解就是要解决第二个层次的问题。决第二个层次的问题。 3 不要把这种培训神化。不要把这种培训神化。 培训所讲的内容是提供你思考的引导,而非别人培训所讲的内容是提供你思考的引导,而非别人思考的结论。是思考的结论。是“渔渔”而不是而不是“鱼鱼”。 在千变万化的硬件、在千变万化的硬件、OS以及形形色色的编译器以及形形色色的编译器上,根本不存在普遍适用一成不变的东西。永远上,根本不存在普遍适用一成不变的东西。永远不变的是变化。因此唯一可信赖的是你自己的思不变的是变化。因此唯一可信赖的是你自己的思考。考。 不要以编译器来理解语言,要依

3、靠语言标准。不要以编译器来理解语言,要依靠语言标准。 唯有真了解了语言的每个概念背后的原理机制,唯有真了解了语言的每个概念背后的原理机制,才会在驾驭语言上立于不败之地。才会在驾驭语言上立于不败之地。 4 知道了语言能做什么,还要知道它不能做什么。知道了语言能做什么,还要知道它不能做什么。 语言是概念、是原理,它只是提供了一堆语言是概念、是原理,它只是提供了一堆“零件零件”、一套机制,并没规定该怎么组织成程序。、一套机制,并没规定该怎么组织成程序。 语言仅是语法层面不是语义层面的东西,仅是打语言仅是语法层面不是语义层面的东西,仅是打造整体的零部件,系统整体是个什么,它根本不造整体的零部件,系统整

4、体是个什么,它根本不知道,也不关心。那是语义,是程序员的事,也知道,也不关心。那是语义,是程序员的事,也正是程序员发挥想象力表现才华的广阔天地。正是程序员发挥想象力表现才华的广阔天地。 同一种语言,可以写出精美绝伦的程序,也可以同一种语言,可以写出精美绝伦的程序,也可以造出一堆垃圾。造出一堆垃圾。 “事在人为事在人为”。 5 C语言的语法要素:语言的语法要素: (1) 字符集字符集 关键字关键字 运算符运算符 标识符标识符 表达式表达式 语句语句 6 C语言的语法要素:语言的语法要素: (2) 程序结构程序结构 数据结构数据结构 数组数组 结构体结构体 共用体共用体 枚举枚举 程序执行形态程序

5、执行形态函数函数 程序存储形态程序存储形态文件文件 7 C语言的语法要素:语言的语法要素: (3) 常量常量 变量变量 类型类型 8 使用变量的注意要点使用变量的注意要点变量都有域值变量都有域值(最大最小值最大最小值),使用时防止越界;,使用时防止越界;避免用无符号变量存储负数;避免用无符号变量存储负数;特别要注意变量的特别要注意变量的Scope。有符号数给无符号赋值赋值的问题有符号数给无符号赋值赋值的问题 例例 下面处理的结果是多少?下面处理的结果是多少? int i = -1; unsigned int ui ; ui = i; 二、二、C语言开发流程语言开发流程 10 六大环节、各环节作

6、用六大环节、各环节作用 步骤步骤: 编辑编辑 预编译预编译 编译编译 链接链接 加载加载 运行运行成果成果:.cpp ( .h) .obj.exe是否真正理解了是否真正理解了它们的含义?它们的含义? 11 编译是分界线编译是分界线 解释:解释:“静态静态”“动态动态” 12 VC+6.0是是MicroSoft公司的功能强大开发公司的功能强大开发平台。尽管强大但也并非尽善尽美。平台。尽管强大但也并非尽善尽美。该平台同时含有该平台同时含有C和和C+两个编译器两个编译器,分别自分别自动支持动支持.C和和.CPP文件。即,当使用文件后缀名文件。即,当使用文件后缀名为为.C时,不可在程序中使用超出时,不

7、可在程序中使用超出ANSI C标准的标准的语法规则。同样,当使用文件后缀名为语法规则。同样,当使用文件后缀名为. CPP时时,不可在程序中使用,不可在程序中使用 C+标准已淘汰的语法规标准已淘汰的语法规则。则。关于关于VC+6.0编译器编译器 13 /* . */ 和和/* . */ 都是都是 VC+6.0注释符,都用于注释符,都用于程序中对文本的注释。程序中对文本的注释。在注释在注释单行单行时用时用/* . */ 或或/* . */ 以及用以及用/* . */ 或或/* . */ 都无问题。都无问题。在注释在注释多行多行时用时用/* . */ 或或/* . */以及以及 /* . */ 都无

8、问题,都无问题, 但用但用 /* . */ 则错误。编译器会认为:则错误。编译器会认为:error : unexpected end of file found in comment.关于注释符的使用关于注释符的使用 14 程序执行代价:运行时占用系统资源代价,主要是指程序执行代价:运行时占用系统资源代价,主要是指空间和时间消耗。如今已不是主要的关心问题。空间和时间消耗。如今已不是主要的关心问题。翻译的代价:翻译的速度和占用系统资源代价。对于翻译的代价:翻译的速度和占用系统资源代价。对于教学性的语言较为强调。教学性的语言较为强调。 程序创建、测试和使用的代价:程序员设计、编码、程序创建、测试和

9、使用的代价:程序员设计、编码、调试、修改、集成、测试和使用时投入的总时间与调试、修改、集成、测试和使用时投入的总时间与工作量。这是目前最关心的代价之一。工作量。这是目前最关心的代价之一。程序维护的代价:在程序的使用过程中对程序反复修程序维护的代价:在程序的使用过程中对程序反复修改、修复和升级扩充所花费的代价。这也是目前最改、修复和升级扩充所花费的代价。这也是目前最关心的代价之一。关心的代价之一。程序语言的使用代价度量程序语言的使用代价度量三、三、C 语言风格语言风格 16 版权和版本的声明位于头文件和定义文件的版权和版本的声明位于头文件和定义文件的开头,应该包括以下内容:开头,应该包括以下内容

10、:版权信息版权信息文件名称,标志符,摘要文件名称,标志符,摘要当前版本号,作者,修改日期当前版本号,作者,修改日期版本历史信息版本历史信息 风格风格 (1) 17 风格风格 (2) 头文件的结构头文件的结构由三部分内容组成:由三部分内容组成:(1)头文件开头处的版权和版本声明)头文件开头处的版权和版本声明;(2)预处理块)预处理块;(3)函数和类结构声明等。)函数和类结构声明等。 18 【规则规则1-2-1】为了防止头文件被重复引用,应当用为了防止头文件被重复引用,应当用ifndef/define/endif 结构产生预处理块。结构产生预处理块。【规则规则1-2-2】用用#include 格式

11、来引用标格式来引用标准库的头文件(编译器将从标准库目录开始搜索)准库的头文件(编译器将从标准库目录开始搜索).【规则规则1-2-3】用用#include “filename.h” 格式来引用非格式来引用非标准库的头文件(编译器将从用户的工作目录开始标准库的头文件(编译器将从用户的工作目录开始搜索)搜索).【建议建议1-2-1】不提倡使用全局变量,尽量不要在头文不提倡使用全局变量,尽量不要在头文件中出现象件中出现象extern int value 这类声明。这类声明。 风格风格 (3) 19 #ifndef GRAPHICS_H / 防止防止graphics.h 被重复引用被重复引用#defin

12、e GRAPHICS_H#include / 引用标准库的头文件引用标准库的头文件#include “myheader.h” / 引用非标准库的头文件引用非标准库的头文件 风格风格 (4) 20 头文件的作用头文件的作用早期的编程语言如早期的编程语言如Basic、Fortran 没有头文件的概没有头文件的概念,念,C 语言的初学者虽然会用使用头文件,但常语言的初学者虽然会用使用头文件,但常常不明其理。这里对头文件的作用略作解释:常不明其理。这里对头文件的作用略作解释:(1)通过头文件来调用库功能。在很多场合,源代)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提

13、供头码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。现的。编译器会从库中提取相应的代码。(2)头文件能加强类型安全检查。如果某个接口被)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。轻程序员调试、

14、改错的负担。 风格风格 (5) 四、四、C 语言版式语言版式 22 版式虽然不会影响程序的功能,但会影响可读性。版式虽然不会影响程序的功能,但会影响可读性。程序的版式追求清晰、美观,是程序风格的重程序的版式追求清晰、美观,是程序风格的重要构成因素。要构成因素。 空行空行 空行起着分隔程序段落的作用。空行起着分隔程序段落的作用。 空行得体(不过多也不过少)将使程序的布局更加空行得体(不过多也不过少)将使程序的布局更加清晰。清晰。 空行不会浪费内存,虽然打印含有空行的程序是会空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。多消耗一些纸张,但是值得。版式版式 (1) 23 【规

15、则规则2-1-1】在每个在每个struct、union等等声明之后、声明之后、每个函数定义结束之后都要加空行。每个函数定义结束之后都要加空行。 参见示例参见示例2-1(a) 【规则规则2-1-2】在一个函数体内,逻揖上密切相关的在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。语句之间不加空行,其它地方应加空行分隔。 参见示例参见示例2-1(b )版式版式 (2) 24 2-1(a) / 空行空行void Function1()/ 空行空行void Function2()/ 空行空行2-1(b)/ 空行空行while (condition) statement1; / 空

16、行空行 if (condition) statement2; else statement3; / 空行空行 statement4; 版式版式 (3) 25 代码行代码行 【规则规则2-2-1】一行代码只做一件事情,如只定义一一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。并且方便于写注释。 【规则规则2-2-2】if、for、while、do 等语句自占一等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少行,执行语句不得紧跟其后。不论执行语句有多少都要加都要加。这样可以防止书写失误。这样可以防止书

17、写失误。版式版式 (4) 26 示例示例2-2(a) 风格良好的代码风格良好的代码int width; / 宽度宽度int height; / 高度高度int depth; / 深度深度x = a + b;y = c + d;z = e + f;if (width height) dosomething();for (initialization; condition;update) dosomething();/ 空行空行other();示例示例2-2(b) 风格不良的代码风格不良的代码/ 宽度高度深度宽度高度深度int width, height, depth; X a + b; y =

18、c + d; z = e + f;if (width =”、“=”、“+”、“*”、“%”、“&”、“|”、“”这类操作符这类操作符前后不加空格。前后不加空格。【建议建议2-3-1】对于表达式比较长的对于表达式比较长的for 语句和语句和if 语句语句,为了紧凑起见可以适当地去掉一些空格,如,为了紧凑起见可以适当地去掉一些空格,如for (i=0; i10; i+)和和if (a=b) & (c= 2000) / 良好的风格良好的风格if(year=2000) / 不良的风格不良的风格if (a=b) & (c=b&c=d) / 不良的风格不良的风格for (i

19、=0; i10; i+) / 良好的风格良好的风格for(i=0;i10;i+) / 不良的风格不良的风格for (i = 0; i 10; i +) / 过多的空格过多的空格版式版式 (9) 31 x = a b ? a : b; / 良好的风格良好的风格x=aFunction(); / 不要写成不要写成b - Function();版式版式 (10) 32 对齐对齐【规则规则2-4-1】程序的分界符程序的分界符和和应独占一行应独占一行并且位于同一列,同时并且位于同一列,同时与引用它们的语句左对与引用它们的语句左对齐齐。【规则规则2-4-2】 之内的代码块在之内的代码块在右边数格处右边数格处

20、左对齐。左对齐。版式版式 (11) 33 示例示例2-4(a) 风格良好的对齐风格良好的对齐void Function(int x) / program codeif (condition) / program codeelse / program codefor (initialization; condition; update) / program codewhile (condition) / program code如果出现嵌套的,如果出现嵌套的,则使用缩进对齐,如:则使用缩进对齐,如: 34 示例示例2-4(b) 风格不良的对齐风格不良的对齐void Function(int x)

21、 / program codeif (condition) / program codeelse / program codefor (initialization; condition; update) / program codewhile (condition) / program code 35 长行拆分长行拆分【规则规则2-5-1】代码行最大长度宜控制在代码行最大长度宜控制在70 至至80 个字个字符以内。代码行不要过长,否则眼睛看不过来,也符以内。代码行不要过长,否则眼睛看不过来,也不便于打印。不便于打印。【规则规则2-5-2】长表达式要在低优先级操作符处拆分成长表达式要在低优先级

22、操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语拆分出的新行要进行适当的缩进,使排版整齐,语句可读。句可读。版式版式 (12) 36 示例示例2-5 长行的拆分长行的拆分if (very_longer_variable1 = very_longer_variable12)& (very_longer_variable3 = very_longer_variable14)& (very_longer_variable5 = very_longer_variable16) dosome

23、thing();virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix,CMatrix rightMatrix);for (very_longer_initialization; very_longer_condition; very_longer_update) dosomething(); 37 版式版式 (13) 修饰符的位置修饰符的位置修饰符修饰符* 和和 应该靠近数据类型还是该靠近变量名,应该靠近数据类型还是该靠近变量名,是个有争议的活题。若将修饰符是个有争议的活题。若将修饰符* 靠近数据类型,靠近数据类型,例如:例如:int* x;

24、从语义上讲此写法比较直观,即从语义上讲此写法比较直观,即x是是int 类型的指针。类型的指针。上述写法的弊端是容易引起误解,例如:上述写法的弊端是容易引起误解,例如:int* x, y; 此此处处y 容易被误解为指针变量。虽然将容易被误解为指针变量。虽然将x 和和y 分行定义分行定义可以避免误解,但并不是人人都愿意这样做。可以避免误解,但并不是人人都愿意这样做。 38 版式版式 (14) 【规则规则2-6-1】应当将修饰符应当将修饰符* 和和 紧靠变量名紧靠变量名例如:例如:char *name;int *x, y; / 此处此处y 不会被误解为指针不会被误解为指针 39 版式版式 (15) 注释注释C 语言的注释符为语言的注释符为“/*/”。C+语言中,程序块的注释常采用语言中,程序块

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论