【C语言的学习】第十一回合:预处理命令大集合

第十一回合:预处理命令

预处理命令:可以改进程序设计的环境,提高编程效率。

其功能主要有三种:宏定义、文件包含、文件编译。

A: 宏定义

(a)      不带参数的宏定义

格式:#define标识符字符串

如:#define  PI 3.1415926

*标识符被称为:宏名

*在预编译时将宏名替换成字符串的过程为:宏展开。

*#define 是宏定义命令

PS:

(1)      宏名一般为大写字母表示,便于区别;但也可以是小写的(嘻嘻,这没有规定必须大写)。

(2)      使用宏名替换可以减少代码量,易于维护

(3)      宏定义不是C语句,所以不必在末尾加分号。如果加了分号,会宏名会替代字符串和分号

(4)      可以用#undef命令中止宏定义的作用域,否则其作用域由开始定义本文件结束。

(5)      宏定义时,可以引用已定义的宏名,可以层层置换

如:

#define R 3.0

#define PI3.1415926

#define L 2*PI*R

#define S PI*R*R

(6)      对于程序中有“”(双撇号括)括起来的字符串内的字符,即使与宏名相同,也不进行置换。

如:

#define string hello,world!

printf(“string”);

打印的结果是:string     

(7)      宏定义有别于变量的定义,宏定义只做字符替换,不分配存储空间

(b)      带参数的宏定义

作用:进行参数的替换

格式:#define宏名(参数表)  字符串

如: #define   ADD(a, b)  (a+ b)

PS:

(1)     对于带参数的宏,按从左到有进行置换,如果字符串中的字符不是参数字符(如a+ b中的+)要保留。

(2)      在宏定义的宏名与参数的括号之间不能加空格,否则会被当作字符串的一部分

注意:函数与宏的区别

(1)     使用宏的次数多时,宏展开后程序的长度会增长;而函数的调用不会。

(2)     宏的替换不占用运行时间,只占用编译时间;而函数则占用运行时间(即分配单元、值传递、返回等)

       

B: “文件包含处理

文件包含处理:一个源文件可以将另外一个源文件的全部包含进来。

格式:(a)#include “文件名

      (b)#include <文件名>

两种格式的区别:使用尖括号表示在包含文件(即库文件)目录中去查找(包含目录是由用户在设置环境时设置),而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录(库文件)中去查找。

PS:

(1)      一个#include命令只能包含一个源文件,多个源文件要多个#include的命令

(2)      如果文件1要包含文件2,而文件2要包含文件3,则可以在文件1中用两个#include命令分别包含文件2和文件3,而且文件3必须出现在文件2前。

(3)      文件包含可以嵌套使用,即一个包含文件可以包含一个被包含的文件

(4)      被包含文件(file2.h)与其所在的文件(即用#include命令的源文件file2.c),在预编译后已成为同一个文件(而不是两

(5)      个文件)。因此,如果file2.h中有全局静态变量,它也在file1.h文件中有效,不必用extern声明。

C:条件编译

   条件编译:是对部分内容指定编译的条件,是其满足一定条件才进行编译。

格式:

(1)      

#ifdef  标识符

  程序段1

#else

  程序段2

#endif

作用:如果标识符被#define定义过,就进行程序段1的编译;反之对程序段2进行编译。如果没有程序段2,可以对#else省略。

(2)

      #ifndef 标识符 

程序段1

#else

         程序段

      #endif

作用:如果标识符没有被#define定义过,则对程序段1进行编译;反之对程序段2进行编译。

(3)

   #if 常量表达式

程序段1

   #else 

           程序段2

       #endif

作用:如果表达式的值为真(即非0),则就对程序段1进行编译;反之对程序段2进行编译。


(复习做的笔记,还在整理中。。。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值