C语言入门(九)预处理

以#开头的命令为预处理命令,如#include <stdio.h>, #define PI 3.1415926等

预处理命令一般都放在源文件的前面,并在函数之外,被称为预处理部分

无参宏定义:#define 标识符 字符串;

1.宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换

2.宏定义不是说明或语句,再行末不必加分号

3.宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束(如要终止其作用可使用#undef命令)

4.宏名在源程序中若用括号括起来,则预处理程序不对其作宏代换

5.宏定义允许嵌套

6.宏名一般用大写字母表示

7.可用宏定义表示数据类型

8.对输出格式作宏定义,可减少书写次数

宏定义表示数据类型和用typedef定义数据说明符的区别:

宏定义只是简单的字符串代换,是在预处理完成的,而typedef是在编译时处理的,它不是作简单的代换,

而是对类型说明符重新命名。被命名的标识符具有类型定义说明的功能

带参宏定义:#define 宏名(形参表) 字符串

C语言允许宏带有参数,在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。

对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参

带参宏调用: 宏名(实参表);

例:

#define M(y) y*y+3*y  /*宏定义*/

......

k = M(5);  /*宏调用*/

......

1.带参宏定义中,宏名和实参表之间不能有空格出现

2.在带参宏定义中,形参不分配内存单元,因此不必做类型定义,宏调用的实参有具体值,需要用来代换形参,因此必须作类型说明

3.在宏定义中的形参是标识符,而宏调用中的实参可以是表达式

4.在宏定义中,字符串内的形参通常要用括号括起来以避免出错

5.带参的宏和带参函数相似但不同

6.宏定义还可以定义多个语句

strcat()函数:粘贴一个字符串

文件包含

1.一个include命令只能指定一个被包含文件

2.文件包含允许被嵌套

3.包含的文件名可以用双引号括起来(表示在源文件目录中去查找,找不到再去包含文件目录),也可以用尖括号括起来(表示在包含文件目录中去查找)

条件编译

推荐预处理的条件编译,如:

#if(0)

......

#endif

条件编译三个不成文的规则

1:如果标识符已被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译(程序段2可以没有)

#ifdef 标识符

    程序段1

#else

    程序段2

#endif

2:1的反过来版,对于不确定是否有定义过宏名有奇效

#ifndef 标识符

     程序段1

#else

     程序段2

#endif

3.啥都不说了,你懂的

#if 常量表达式

      程序段1

#else

      程序段2

#endif

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值