C语言进修教程第九章-预处理惩罚(1)
当前位置:以往代写 > C/C++ 教程 >C语言进修教程第九章-预处理惩罚(1)
2019-06-13

C语言进修教程第九章-预处理惩罚(1)

C语言进修教程第九章-预处理惩罚(1)

预处理惩罚

概述
在前面各章中,已多次利用过以“#”号开头的预处理惩罚呼吁。如包括呼吁# include,宏界说呼吁# define等。在源措施中这些呼吁都放在函数之外, 并且一般都放在源文件的前面,它们称为预处理惩罚部门。

所谓预处理惩罚是指在举办编译的第一遍扫描(词法扫描和语法阐明)之前所作的事情。预处理惩罚是C语言的一个重要成果, 它由预处理惩罚措施认真完成。当对一个源文件举办编译时, 系统将自动引用预处理惩罚措施对源措施中的预处理惩罚部门作处理惩罚, 处理惩罚完毕自动进入对源措施的编译。

C语言提供了多种预处理惩罚成果,如宏界说、文件包括、 条件编译等。公道地利用预处理惩罚成果编写的措施便于阅读、修改、 移植和调试,也有利于模块化措施设计。本章先容常用的几种预处理惩罚成果。

宏界说
在C语言源措施中答允用一个标识符来暗示一个字符串, 称为“宏”。被界说为“宏”的标识符称为“宏名”。在编译预处理惩罚时,对措施中所有呈现的“宏名”,都用宏界说中的字符串去代换, 这称为“宏代换”或“宏展开”。

宏界说是由源措施中的宏界说呼吁完成的。 宏代换是由预处理惩罚措施自动完成的。在C语言中,“宏”分为有参数和无参数两种。 下面别离接头这两种“宏”的界说和挪用。

无参宏界说
无参宏的宏名后不带参数。其界说的一般形式为: #define 标识符 字符串 个中的“#”暗示这是一条预处理惩罚呼吁。每每以“#”开头的均为预处理惩罚呼吁。“define”为宏界说呼吁。 “标识符”为所界说的宏名。“字符串”可以是常数、表达式、名目串等。在前面先容过的标记常量的界说就是一种无参宏界说。 另外,常对措施中重复利用的表达式举办宏界说。譬喻: # define M (y*y+3*y) 界说M表达式(y*y+3*y)。在编写源措施时,所有的(y*y+3*y)都可由M取代,而对源措施作编译时,将先由预处理惩罚措施举办宏代换,即用(y*y+3*y)表达式去置换所有的宏名M,然后再举办编译。
#define M (y*y+3*y)
main(){
int s,y;
printf("input a number: ");
scanf("%d",&y);
s=3*M+4*M+5*M;
printf("s=%d\n",s);
}
上例措施中首先举办宏界说,界说M表达式(y*y+3*y),在s= 3*M+4*M+5* M中作了宏挪用。在预处理惩罚时经宏展开后该语句变为:s=3*(y*y+3*y)+4(y*y+3*y)+5(y*y+3*y);但要留意的是,在宏界说中表达式(y*y+3*y)双方的括号不能少。不然会产生错误。
看成以下界说后: #difine M y*y+3*y在宏展开时将获得下述语句: s=3*y*y+3*y+4*y*y+3*y+5*y*y+3*y;这相当于; 3y

    关键字:

在线提交作业