当前位置: 首页 > article >正文

宏定义define,内联函数inline,typedef

1.#define 是文本替换。

#define 是一个预处理器指令,用来创建宏定义。它可以定义符号常量、简单的函数或执行其他形式的文本替换。一般用于定义宏(macro),主要有两种用途:

1.定义常量
2.创建宏函数

无论哪种都是用于在编译时替换文本,也就是 define 实际上只是做文本的替换。

2.#inline是一个函数定义关键字

内联函数(inline function)和普通函数(regular function)之间的主要区别在于它们的实现方式及其对性能的影响。下面是一些关键的不同点:

2.内联函数(Inline Function)

inline 是一个关键字,用于提示编译器尽可能地将函数体直接嵌入到调用点处,而不是执行常规的函数调用。

  1. 定义与声明

    • 内联函数通常在函数定义前加上inline关键字,表明该函数可以被内联展开。
    • 内联函数可以在头文件中定义,这样在多个编译单元中使用时不会产生重复定义的错误。
  2. 调用机制

    • 当编译器遇到内联函数调用时,它会尝试将函数体直接嵌入到调用点的位置,而不是执行传统的函数调用机制(跳转到函数地址、传递参数、返回等)。
    • 这种替换过程称为内联展开(inlining),可以减少函数调用的开销,提高程序的执行效率。
  3. 性能影响

    • 内联函数可以减少函数调用的开销,从而提高执行速度。
    • 但是,内联函数会增加生成的目标代码大小,因为每次调用的地方都会嵌入函数体,可能导致更大的二进制文件。
  4. 适用场景

    • 内联函数适用于那些频繁调用但执行速度快的小函数。
    • 对于大型函数,内联展开可能会导致代码膨胀,反而降低性能。
  5. 最终决定权

    • 虽然开发者建议使用inline关键字,但是否真的内联是由编译器决定的。编译器可能会基于函数的大小、调用频率等因素来决定是否内联。
  • 内联函数通常用于小型、频繁调用的函数,可以减少函数调用开销,但会增加代码大小。
  • 普通函数适用于大型函数或不频繁调用的情况,虽然有一定的调用开销,但不会显著增加代码大小。

在实践中,选择使用内联函数还是普通函数取决于具体的应用场景和性能需求。现代编译器通常具有优化功能,可以在适当的时候自动内联函数,即使没有显式地使用inline关键字。

3.typedef:已存在类型的别名

typedef 是一种类型定义关键字,用于为现有类型创建新的名称(别名)。与宏定义不同,typedef 是在编译阶段处理的,有更严格的类型检查。


http://www.kler.cn/a/286136.html

相关文章:

  • 完美解决node-sass@4.14.1 postinstall: `node scripts/build.js` 问题
  • Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
  • 双臂机器人协作/合作阻抗建模及其控制实现(Dual-Arm Cooperative)
  • Vue 3 中 `async` 函数的示例
  • 考研系列-数据结构冲刺课复习笔记(下)
  • 【iOS】通过第三方库Masonry实现自动布局
  • Llama与ChatGPT的优劣解析
  • saToken的集成和使用
  • 二叉树的最大深度(LeetCode)
  • 数据结构---单链表(常见的复杂操作)
  • 多参数遥测终端科技守护水电站生态流量下泄
  • 对字符、字符串的研究
  • PHP 语法
  • Redis从入门再到入门(中)
  • Java算法之插入排序(Insertion Sort)
  • 16:螺丝孔和MARK点布局
  • 好用的运动耳机品牌推荐?几款开放式蓝牙耳机推荐
  • 机器视觉-4 检测原理之OpenCV Blob特征检测
  • RAG中pdf解析的方法全览
  • [范文赏析 代码复盘]2023高教社杯数学建模国赛C题详细代码 文章 数据教学 保姆级手把手包含文档格式 2024数模国赛教学:蔬菜类商品的自动定价和补货决策