浅谈C语言中预处理.docVIP

  • 7
  • 0
  • 约3.07千字
  • 约 6页
  • 2017-03-29 发布于北京
  • 举报
浅谈C语言中预处理.doc

浅谈C语言中预处理   摘 要:C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。C语言在很多方面都可以用,不仅仅是在软件开发上,各类科研都是需要用到C语言的。具体应用比如我是学硬件的,单片机以及嵌入式系统都可以用C来开发。C语言发展如此迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件,如DBASE Ⅲ PLUS、DBASE Ⅳ 都是由C 语言编写的。用C语言加上一些汇编语言子程序,就更能显示C语言的优势了。   关键词:C语言;预处理;宏定义   编译预处理是C语言一个重要且特别的功能.在进行C语言程序设计时,灵活使用编译预处理技术可使源程序模块化结构好,更加清晰和便于阅读,并易于调试和移植。所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所做的工作。预处理是C语言的一个重要功能, 它由预处理程序负责完成。当对一个源文件进行编译时,系统把自动引用预处理程序对源程序中的预处理部分作处理,处理完毕自动进入对源程序的编译。在嵌入式系统编程中不管是内核的驱动程序还是应用程序的编写,涉及大量的预处理与条件编译,这样做的好处主要体现在代码的移植性强以及代码的修改方便等方面。因此引入了预处理与条件编译的概念。   在C语言的程序中可包括各种以符号#开头的编译指令,这些指令称为预处理命令。预处理命令属于C语言编译器,而不是C语言的组成部分。通过预处理命令可扩展C语言程序设计的环境。   1 预处理的工作方式   预处理的行为是由指令控制的。这些指令是由#字符开头的一些命令。   #define指令定义了一个宏――用来代表其他东西的一个命令,通常是某一个类型的常量。预处理会通过将宏的名字和它的定义存储在一起来响应#define指令。当这个宏在后面的程序中使用到时,预处理器“扩展”了宏,将宏替换为它所定义的值。   #include指令告诉预处理器打开一个特定的文件,将它的内容作为正在编译的文件的一部分“包含”进来。例如,下面这行命令:   #include。指示预处理器打开一个名字为stdio.h的文件,并将它的内容加到当前的程序中。预处理器的输入是一个C语言程序,程序可能包含指令。预处理器会执行这些指令,并在处理过程中删除这些指令。预处理器的输出是另外一个程序:原程序的一个编辑后的版本,不再包含指令。预处理器的输出被直接交给编译器,编译器检查程序是否有错误,并经程序翻译为目标代码。 C语言的预处理主要有三个方面的内容:宏定义,文件包含以及条件编译。本文主要讨论前两者。   2 宏定义命令――#define   使用#define命令并不是真正的定义符号常量,而是定义一个可以替换的宏。被定义为宏的标示符称为“宏名”。在编译预处理过程时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。   在C语言中,宏分为有参数和无参数两种。   2.1 无参数的宏   其定义格式如下:   #define宏名 字符串   在以上宏定义语句中,各部分的含义如下:   第一,#:表示这是一条预处理命令(凡是以“#”开始的均为预处理命令)。第二,define:关键字“define”为宏定义命令。第三,宏名:是一个标示符,必须符合C语言标示符的规定,一般以大写字母标示宏名。第四,字符串:可以是常数,表达式,格式串等。在前面使用的符号常量的定义就是一个无参数宏定义。   Notice:   预处理命令语句后面一般不会添加分号,如果在#define最后有分号,在宏替换时分号也将替换到源代码中去。在宏名和字符串之间可以有任意一个空格。   Eg:#define PI 3.14   在使用宏定义时,还需要注意以下几点:   第一,宏定义是宏名来表示一个字符串,在宏展开时又以该字符串取代宏名。这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。第二,宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。第三,宏名在源程序只能够若用引号括起来,则预处理程序不对其作宏替换。第四,宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层替换。第五,习惯上宏名可用大写字母表示,以方便与变量区别。但也允许用小写字母。   2.2 带参数的宏   #define命令定义宏时,还可以为宏设置参数。与函数中的参数类似,在宏定于中的参数为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档