2016 - 2024

感恩一路有你

带参数的宏定义的一般格式 带参数宏定义和函数的区别?

浏览量:2202 时间:2021-03-10 18:49:55 作者:admin

带参数宏定义和函数的区别?

1. 当编译器编译源代码时,宏将被简单地替换,没有任何逻辑检测,即简单的代码复制。

2. 定义宏时不考虑参数类型。

3. 参数宏的使用将使具有相同功能的代码块在目标文件中有多个副本,这将增加目标文件的大小。

4. 参数宏的运行速度比函数快,因为不需要参数栈的压出操作。

5. 在定义参数宏时,应该更加小心,并添加更多的方括号。

6. 该函数只存在于目标文件中的一个位置,这样可以节省程序空间。

7. 函数的调用会涉及参数的传递,压栈/出栈操作比较慢。

8. 函数的参数有传递值和地址(指针)的问题,但参数宏不存在。

宏定义用法?

说到宏定义,我们首先应该了解什么是预处理指令。我相信你对它并不陌生。在编写程序之前,程序开头的include指令和define指令都是预处理指令,这使得我们的编译更加高效和方便。因此,用户可以在C语言中添加一些特定的预处理指令。

C语言提供的预处理功能有:宏定义、文件包含、条件编译。今天,我将带大家学习宏定义。宏定义有两种,一种是“无参数宏定义”,另一种是“有参数宏定义”。

1、无参数宏定义

无参数宏定义相对简单,它使用指定的标识符来表示字符串。它的一般形式是;

#define identifier string

它的功能是用这个程序文件中指定的标识符E替换2.71828459。在预处理中,指令后的所有e都被2.7182818459替换。此方法允许用户用简单名称替换长字符串,因此此标识符(名称)称为“宏名称”

在预处理期间用字符串替换宏名称的过程称为“宏扩展”。#Define是宏定义指令。

2、带参数宏定义

带参数宏定义不仅是一个简单的字符串替换,也是一个参数替换。其定义的一般形式是;

#define identifier(macro name)(parameter table)string

该字符串包含括号中指定的参数。

宏定义只占用编译时间,而函数调用占用运行时间(分配单元、保存字段、值传输、返回)。每次执行都必须加载,因此执行速度比宏定义慢。

当宏定义被多次使用时,源程序在宏定义展开后会很长时间,因为每次展开都会使程序增长,但执行速度更快(这不是绝对的)。当宏定义扩展较多时,目标文件很大,执行过程中系统频繁换页,效率较低)。函数调用不会使源程序变长。

带参数的宏定义的一般格式 宏定义可以有参数吗 带参的宏与函数的区别

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。