预编译处理-----C语言中的宏以其和函数的区别

  宏是一种预处理指令,可以通过#define定义。

  C语言中的宏可以分为有参数宏和无参数宏两类。


1.无参数宏(也是我们最常用的一类宏)

a.形式为:#define   标识符    宏体

(eg:#define x 100      其功能是指定标识符 x 来代替100. 这种替换主要目的是为用户在编程时提供一定的方便,并能在一定程度上提高程序的运行效率。  )

2.有参数宏

a.形式为:#define  宏名(形参表)  宏体 (形参表包括一个或多个形参,每个形参之间使用逗号分隔)

示例如下:


  代码段CIRCLE(radius,clong,area)被展开成如下形式:

clong = 2*3.1415926*radius;area=3.1415926*radius*radius;

通过上述代码,我们可以看到有参宏在使用时和函数十分相似,但他们之间还是有一定区别的。

  他两的区别主要如下:

1.在调用函数时,先将调用函数的地址放入堆栈,函数执行完后再将调用函数的地址从堆栈返回给程序,最后回到原调用点。    而宏展开是使用取代标识直接将宏名取代。

2.展开有参宏时,直接将实参置换形参。而在调用有参函数时,先将实参的值复制一份,然后再将复制的值传给形参。

3.在有参宏中,形参是没有类型的,因此实参可以是任何类型。但在有参函数中,形参是有类型的,因此实参的类型必须与形参保持一致。

宏的使用说明如下:

1.不允许在宏定义行尾加分号。负则宏展开时会将分号作为宏体的一个字符,用于替换宏名。

2.在宏体中如果使用字符串运算符(#),展开时该运算符作用的元素将被转换为使用引号括起来的字符串,同时与其前面的字符串连接。


3.宏名的有效范围是从定义命令之后,到当前文件结束。

4.进行宏定义时。可以引用已存在的宏名。

5.当宏定义在一行中书写不完时应该在下一行继续时,应在最后一个字符后加反斜杠“\”



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值