全国计算机二级考试C教程课件.ppt
编译预处理所谓编译预处理是指,在对源程序进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。在+语言中,“宏”分为无参数的宏(简称无参宏)和有参数的宏(简称有参宏)两种。无参宏定义 1无参宏定义的一般格式无参宏定义的一般格式#define 标识符标识符 语言符号字符串语言符号字符串其中:“define”为宏定义命令;“标识符”为所定义的宏名,通常用大写字母表示,以便于与变量区别;“语言符号字符串”可以是常数、表达式、格式串等。2使用宏定义的优点使用宏定义的优点(1)可提高源程序的可维护性(2)可提高源程序的可移植性(3)减少源程序中重复书写字符串的工作量输输入入圆圆的的半半径径,求求圆圆的的周周长长、面面积积和和球球的的体体积积。要要求求使使用用无无参参宏宏定定义义圆圆周周率。率。/*程序功能:输入圆的半径,求圆的周长、面积和球的体积。程序功能:输入圆的半径,求圆的周长、面积和球的体积。*/#define PI 3.1415926 /*PI是宏名,是宏名,3.1415926用来替换宏名的常数用来替换宏名的常数*/main()float radius,length,area,volume;coutradius;length=2*PI*radius;/*引用无参宏求周长引用无参宏求周长*/area=PI*radius*radius;/*引用无参宏求面积引用无参宏求面积*/volume=PI*radius*radius*radius*3/4;/*引用无参宏求体积引用无参宏求体积*/coutlength=,length,area=,area,volume=,volumen,;3说明说明(1)宏宏名名一一般般用用大大写写字字母母表表示示,以以示示与与变变量量区区别别。但但这这并非是规定。并非是规定。(2)宏宏定定义义不不是是语语句句,所所以以不不能能在在行行尾尾加加分分号号。否否则则,宏展开时,会将分号作为字符串的宏展开时,会将分号作为字符串的1个字符,用于替换宏名。个字符,用于替换宏名。(3)在在宏宏展展开开时时,预预处处理理程程序序仅仅以以按按宏宏定定义义简简单单替替换换宏宏名名,而而不不作作任任何何检检查查。如如果果有有错错误误,只只能能由由编编译译程程序序在在编编译译宏展开后的源程序时发现。宏展开后的源程序时发现。(4)在进行宏定义时,可以引用已定义的宏名)在进行宏定义时,可以引用已定义的宏名。有参宏定义1带参宏定义的一般格式带参宏定义的一般格式#define 宏名宏名(形参表形参表)语言符号字符串语言符号字符串2带参宏的调用和宏展开带参宏的调用和宏展开(1)调用格式:宏名)调用格式:宏名(实参表实参表)(2)宏展开:用宏调用提供的实参字符串,直接置换宏)宏展开:用宏调用提供的实参字符串,直接置换宏定义命令行中、相应形参字符串,非形参字符保持不变。定义命令行中、相应形参字符串,非形参字符保持不变。3说明说明(1)定定义义有有参参宏宏时时,宏宏名名与与左左圆圆括括号号之之间间不不能能留留有有空空格格。否否则则,编编译译系系统统将将空空格格以以后后的的所所有有字字符符均均作作为为替替代代字字符符串串,而将该宏视为无参宏。而将该宏视为无参宏。(2)有有参参宏宏的的展展开开,只只是是将将实实参参作作为为字字符符串串,简简单单地地置置换换形形参参字字符符串串,而而不不做做任任何何语语法法检检查查。在在定定义义有有参参宏宏时时,在在所所有形参外和整个字符串外,均加一对圆括号。有形参外和整个字符串外,均加一对圆括号。文件包含1文件包含的概念文件包含的概念文文件件包包含含是是指指,一一个个源源文文件件可可以以将将另另一一个个源源文文件件的的全全部部内容包含进来。内容包含进来。2文件包含处理命令的格式文件包含处理命令的格式include “包含文件名包含文件名”或或 include 两种格式的区别仅在于:两种格式的区别仅在于:(1)使使用用双双引引号号:系系统统首首先先到到当当前前目目录录下下查查找找被被包包含含文文件件,如如果果没没找找到到,再再到到系系统统指指定定的的“包包含含文文件件目目录录”(由由用用户在配置环境时设置)去查找。户在配置环境时设置)去查找。(2)使使用用尖尖括括号号:直直接接到到系系统统指指定定的的“包包含含文文件件目目录录”去查找。一般地说,使用双引号比较保险。去查找。一般地说,使用双引号比较保险。3文件包含的优点文件包含的优点一一个个大大程程序序,通通常常分分为为多多个个模模块块,并并由由多多个个程程序序员员分分别别编编程程。有有了了文文件件包包含含处处理理功功能能,就就可可以以将将多多个个模模块块共共用用的的数数据据(如如符符号号常常量量和和数数据据结结构构)或或函函数数,集集中中到到一一个个单单独独的的文文件件中中。这这样样,凡凡是是要要使使用用其其中中数数据据或或调调用用其其中中函函数数的的程程序序员员,只只要要使使用用文文件件包包含含处处理理功功能能,将将所所需需文文件件包包含含进进来来即即可可,不不必必再再重重复复定定义义它它们们,从从而而减减少少重复劳动。重复劳动。4说明说明(1)编译预处理时,预处理程序将查找指定的被包)编译预处理时,预处理程序将查找指定的被包含文件,并将其复制到含文件,并将其复制到#include命令出现的位置上。命令出现的位置上。(2)常常用用在在文文件件头头部部的的被被包包含含文文件件,称称为为“标标题题文文件件”或或“头头部部文文件件”,常常以以“h”(head)作作为为后后缀缀,简简称称头头文文件件。在在头头文文件件中中,除除可可包包含含宏宏定定义义外外,还还可可包包含含外部变量定义、结构类型定义等。外部变量定义、结构类型定义等。(3)一一条条包包含含命命令令,只只能能指指定定一一个个被被包包含含文文件件。如如果要包含果要包含n个文件,则要用个文件,则要用n条包含命令。条包含命令。(4)文件包含可以嵌套,即被包含文件中又包含另)文件包含可以嵌套,即被包含文件中又包含另一个文件。一个文件。