十四、程序结构(2)——宏

本文详细介绍了C语言中的宏定义及预处理指令的基本用法,包括如何使用#define进行宏定义,带参数宏的使用原则,以及宏在条件编译中的作用。此外,还探讨了宏与内联函数的区别。
编译预处理指令

(1)#开头的是编译预处理指令

(2)它们不是C语言的成分,但是C语言程序离不开它们

(3)#define用来定义一个宏

#define
#define <名字>  <值>

(1)注意没有结尾的分号,因为不是C的语句

(2)名字必须是一个单词,值可以是各种的东西

(3)在C语言的编译器开始编译之前,编译预处理程序(cpp)会把程序中的名字换成值

——完全的文本替换

(4)gcc-save-temps

(1)如果一个宏的值中有其他的宏的名字,也是会被替换的

(2)如果一个宏的值超过一行,最后一行之前的行末需要加\

(3)宏的值后面出现的注释不会被当做宏的值的一部分

没有值的宏
#define _DEBUG

这类宏是用于条件编译的,后面有其他的编译预处理指令来检查这个宏是否已经被定义过了

预定义的宏
_LINE_
_FILE_
_DATE_
_TIME_
_STDC_
带参数的宏
像函数的宏
#define cube(x) ((x)*(x)*(x))

宏可以带参数

错误定义的宏
#define  RADTODEG(x)(x*57.29578)
#define  RADTODEG(x)(x)*57.29578
带参数的宏的原则

一切都要括号

——整个值要括号

——参数出现的每个地方都要括号

#define  RADTODEG(x) ((x)*57.29578)
带参数的宏

(1)可以带多个参数

#define MIN(a,b)((a)>(b)?(b):(a))

(2)也可以组合(嵌套)使用其他宏

分号?
#define  PRETTY_PRINT(msg) printf(msg);

if(n<10)
     PRETTY_PRINT("n is less than 10");
else
      PRETTY_PRINT("n is at less  10");
带参数的宏

(1)在大型程序的代码中使用非常普遍

(2)可以非常复杂,如“产生”函数的帮助下

——在#和##这两个运算符

(3)存在中西方文化差异

(4)部分宏会被inline函数替代

其他编译预处理指令

(1)条件编译

(2)error

...

 

转载于:https://www.cnblogs.com/Strugglinggirl/p/9080408.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值