C语言笔记四:预编译与宏定义

一、预编译(由符号 # 开头的一些命令)

C语言中主要有以下三种预编译处理指令:

1.#define和#undef命令

2.#include命令

3.#if…#endif和#if…#else…#endif命令

二、#define指令(用于宏定义,有带参数和不带参数两种类型)

1.不带参数的宏定义

定义格式:#define 符号常量(习惯上一般用大小表示) 替换文本(C语言允许范围内的)

注意点:

(1)如果主函数中有字符串和#define后的符号常量相同,不进行替换

(2)宏定义只是一种字符替换,不进行语法检查(编译阶段不报错,执行才报错)

(3)每条宏命令单独一行(宏命令最后无“;”)

(4)宏不可以被多次定义,但宏可以引用已经定义的宏

#include R 3.0
#define PI 3.14159
#define AREA PI*R*R

(5)宏定义只做字符替换,不分配存储空间(因此宏定义的常量值不能被修改)

(6)可以使用#undef取消宏定义(宏定义的作用范围为第一次定义位置开始到#undef命令结束)

注意使用#undef后,后续无法继续引用#define 符号常量

2.带参数的宏定义

定义格式:#define 宏名(形参列表) 宏体

#define SUM(a,b) a+b

注意:

(1)宏定义时宏名与后面的括号之间不能有空格

(2)在一个带参数的宏定义中,应该用带运算符的宏体和形参括起来

3、宏定义与函数的主要区别

宏定义函数
程序运行时调用函数,系统分配临时存储空间,函数调用将占用程序执行时间宏定义在编译时进行处理,编译阶段展开时不分配存储空间,只占用编译时间
函数调用时,先计算实参再代入形参宏定义只进行对应字符替换
函数的实参、形参必须有定义类型,且定义类型必须一致宏定义不存在类型问题(因为不需要多余的定义)
函数调用不会使源程序变长每一处宏调用都要插入宏体,因此宏展开时使源程序代码增加

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值