黑马程序员---iOS基础---C语言中的预处理命令

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1.预处理的概念

ANSIC标准规定可以在C源程序中加入一些预处理命令 ,以改进程序设计环境,提高编程效率。
这些预处理命令是由ANSIC统一规定的,但是它不是C语言本身的组成部分,不能直接对它们进行编译(因为编译程序不能识别它们)。
必须在对程序进行通常的编之前,先对程序中这些特殊的命令进行预处理
经过预处理后程序可由编译程序对预处理后 的源程序进行通常的编译处理,得到可供执行的目标代码。 

2.C语言中的预处理功能

C语言提供的预处理功能主要有一下三种:

宏定义;

#define  标识符  字符串

(1) 宏名一般习惯用大写字母表示,以便与变量名相区别。但这并非规定,也可用小写字母。

(2) 使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量。

(3) 宏定义是用宏名代替一个字符串,只作简单置换,不作正确性检查。只有在编译已被宏展开后的源程序时才会发现语法错误并报错。

(4) 宏定义不是C语句,不必在行末加分号。如果加了分号则会连分号一起进行置换。

(5) #define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本源文件结束。通常,#define命令写在文件开头,函数之前,作为文件一部分,

在此文件范围内有效。

(6) 可以用#undef命令终止宏定义的作用域。

(7) 在进行宏定义时,可以引用已定义的宏名,可以层层置换。 

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

(9) 宏定义是专门用于预处理命令的一个专用名词,它与定义变量的含义不同,只作字符替换,不分配内存空间。

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

带参数的宏定义不是简单的替换,展开时还要进行参数的替换。

#define S(a, b) a*b

area = S(1,1) => area = 1*1

#include <stdio.h>

#define PI 3.1415926

#define S(r)PI*r*r

void main()

{

float a,area;

a=3.6;

area=S(a);     

printf("r=%f\narea=%f\n",a,area);

}

宏定义不占运行时间,只是占用编译的时间,而函数占用运行时间,但是宏定义的展开可能使程序变长,而函数则不会。

文件包含;

所谓文件包含处理是指一个源文件可以将另外一个源文件的全部内容包含进来。C语言提供了#include命令用来实现文件包含的操作。
#include<>代表包含的文件是系统提供的,而#include“”表示包含的文件是自己定义的。
文件在编译时,不是把每个文件单独编译然后连接在一起,而是一个文件包含另一个文件后生成一个新的文件进行编译。
文件的包含是可以嵌套的。

条件编译

所谓条件编译,是对部分内容指定编译的条件,使其只在满足一定条件才进行编译。

ifdef 标识符

       程序段1

 #else

       程序段2

 #endif

如果定义了这样的宏,就执行语句

ifndef 标识符

       程序段1

 #else

       程序段2

 #endif

如果没有定义这样的宏名,就执行语句



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值