编译预处理器是C言语编译器的一个重要组成部分。很好的运用C言语的预处理指令能够增强代码的可读性,灵活性,和易于修正等特色,便于程序的结构化。
预处理指令由符号“#”最初,包含宏界说,文件包含,条件处理三个部分。
其间条件编译我还没有用过,所以就具体介绍一下宏界说和文件包含。
一.宏界说
宏界说指令为#define,它的效果便是实现用一个简略易读的字符串来替代
另一个字符串。添加程序的可读性,和保护性。
宏界说分为不带参数的宏界说,和带参数的宏界说。
不带参的宏界说:
一般格局:#define 标识符 常量表达式
例如用一个字符替代一个常数
#define PI 3.1415926
当程序中呈现3.1415926这个常数的时分就能够用PI这个字符替代,假如想修正这个常数只需要修正这个宏界说中的常数,就能够到达修正整个文件中这个常数的意图。这便是添加保护性的表现。
运用留意:
运用中#define 和标识符之间有必要留有空格,标识符和常量表达式之间也有必要有空格。
带参数的宏界说:
带参数的宏界说和不带参数的宏界说之间的差异在于,带参数的宏界说不只是进行字符串的替换,并且还要进行参数的替换。留意是参数替换。
格局:
#define 宏符号名(参数表) 表达式
如:
#define MIN(x,y) (((x)<(y))?(x):(y))
1;留意为了安全起见后边表达式中的参数运用“()”括起来,避免程序中
运用该宏时因为优先级问题引起的过错。
如:#define S(r) PI*r*r
假如程序中用到m=S(a+b)
则替换后等同于 m="PI"*a+b*a+b
明显与咱们的意图不同。
2.宏界说指令#define 要求一行内写完,假如一行内完不成能够用“\”表明下一行持续。
二.文件包含
头文件的意图便是在库函数与运用该库函数的程序之间树立接口。
头文件的界说格局。
以头文件led.h为例。
#ifndef __LED_H__
#define __LED_H__
………内容………
#endif
运用尖括号和双引号的差异:
运用尖括号的话,编译时会先在体系include目录里查找,假如找不到才会在源代码地点目录查找;运用双引号则相反,会先在源代码目录里查找。这就意味着,当体系里(如/usr/include/里)有一个叫做at89c51.h的头文件,而你的源代码目录里也有一个你自己写的at89c51.h头文件,那么运用尖括号时用的便是体系里的;而运用双引号的话则会运用你自己写的那个。
所以主张: 运用体系里供给的头文件时运用尖括号
运用自己编写的头文件时运用双引号
典型的头文件内容包含:
1:阐明文字。用于注释该头文件的主要内容,函数的效果,函数的接口等
2; #define 指令命名的宏界说
3:类型界说。包含结构体,共用体,数组等类型界说