C++中的宏是什么意思

 更新时间:2026年06月12日 09:15:12   作者:光泽雨  
C++里的宏其实就是编译器在正式干活前,先帮你做的一次“全局查找替换”,它不是真正的函数或变量,这篇文章主要介绍了c++中的宏是什么,需要的朋友可以参考下

C++ 里的宏其实就是编译器在正式干活前,先帮你做的一次“全局查找替换”,它不是真正的函数或变量 。‌ 这只是预先定好的一段文本规则,用来简化代码或定义常量,在代码编译前就会完成替换 。‌‌百科‌

🛠 宏到底是怎么工作的

  • 先替换后编译‌:在代码正式编译前,处理程序会把代码里所有的宏名,直接换成你定义的字符串,换完才进行后续编译 。
  • 不做语法检查‌:这个替换过程很“盲目”,不进行类型或语法检查,所以写错了往往要等到编译时才会报错 。
  • 不占内存空间‌:宏定义只是一个临时符号,替换完标识符就删除了,不像变量那样需要分配内存空间 

 主要有哪两种用法

  • 无参数宏‌:最常用来定义常量,比如把 PI 直接定义为 3.14,避免代码里到处写数字 。
  • 带参数宏‌:看起来像函数,能接收参数,但本质还是把参数填进文本里进行替换,比如定义一个求最大值的规则 。‌‌百科‌

 用的时候注意啥

  • 参数要加括号‌:宏体里的参数最好加上括号,防止因为运算顺序导致结果出错 。
  • 末尾别加分号‌:定义末尾通常不加分号,不然分号也会被替换进代码里,可能导致语法错误 。
  • 名字通常大写‌:宏名一般用大写字母,方便和普通变量或函数区分开 。
  • 优先用新特性‌:现代 C++ 更推荐用 const 常量或 inline 函数代替宏,因为它们更安全,有类型检查 。‌‌百科‌

宏是 C/C++ 预处理器提供的一种文本替换机制。预处理器在编译器真正编译代码之前,会对源文件进行预处理,其中就包括展开宏。宏本身不是 C++ 语言的一部分,而是一个独立的预处理指令。

基本定义

宏通过 #define 指令定义,通常有两种形式:

1对象式宏(无参宏)

#define PI 3.14159
#define MAX_SIZE 1024

在代码中出现的 PI 和 MAX_SIZE 会被直接替换成对应的文本。

2. 函数式宏(带参宏)

#define SQUARE(x) ((x)*(x))
#define MAX(a,b) ((a) > (b) ? (a) : (b))

工作原理

预处理阶段,宏名称会被其定义体原封不动地替换进去。例如:

int a = SQUARE(5);
// 预处理后变为: int a = ((5)*(5));

QT4版本的信号和槽写法

//连接有参数的信号和槽

//优点:参数直观。写法简单

//缺点:编译器不检测参数类型

void(Teacher::*teacherSingnal)()=&Teacher::hungry;

void(Student::* studentSlot)(QString)=&Student::treat;

connect(this->zt,SIGNAL(hungry()),this->st,SLOT(treat(QString)));

classISOver();

//信号和槽扩展

//信号连接信号

2、一个信号可以连接多个槽函数

3、多个信号可以连接同一个槽函数

4、信号和槽的参数类型,必须一一对应

5、信号的参数个数可以多于槽函数,反之不可以,相同个数的参数类型也要一一对应。

6、可以利用disconnect 断开信号槽的连接。

到此这篇关于C++中的宏是什么意思的文章就介绍到这了,更多相关c++宏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++实现神经网络框架SimpleNN的详细过程

    C++实现神经网络框架SimpleNN的详细过程

    本来自己想到用C++实现神经网络主要是想强化一下编码能力并入门深度学习,对C++实现神经网络框架SimpleNN的详细过程感兴趣的朋友一起看看吧
    2021-08-08
  • C++ 中CloseHandle 函数--关闭一个句柄

    C++ 中CloseHandle 函数--关闭一个句柄

    这篇文章主要介绍了C++ 中CloseHandle 函数--关闭一个句柄的相关资料,需要的朋友可以参考下
    2017-05-05
  • Cocos2dx实现数字跳动效果

    Cocos2dx实现数字跳动效果

    这篇文章主要为大家详细介绍了Cocos2dx实现数字跳动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • C++深度探索虚函数覆盖示例

    C++深度探索虚函数覆盖示例

    虚函数主要通过V-Table虚函数表来实现,该表主要包含一个类的虚函数的地址表,可解决继承、覆盖的问题,下面这篇文章主要给大家介绍了如何通过一篇文章带你掌握C++虚函数的来龙去脉,需要的朋友可以参考下
    2022-12-12
  • OpenCV实现车牌定位(C++)

    OpenCV实现车牌定位(C++)

    这篇文章主要为大家详细介绍了OpenCV实现车牌定位,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • C++11作用域枚举(Scoped Enums)的实现示例

    C++11作用域枚举(Scoped Enums)的实现示例

    枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(Scoped Enums)的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2025-06-06
  • 详解C++语法中的虚继承和虚基类

    详解C++语法中的虚继承和虚基类

    本文主要介绍了C++语法中的虚继承和虚基类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • C语言实现链队列基本操作

    C语言实现链队列基本操作

    这篇文章主要为大家详细介绍了C语言实现链队列基本操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • C++实现教职工信息管理系统

    C++实现教职工信息管理系统

    这篇文章主要为大家详细介绍了C++实现教职工信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C++中的按位与&、按位与或|、按位异或^运算符详解

    C++中的按位与&、按位与或|、按位异或^运算符详解

    这篇文章主要介绍了C++中的按位与&、按位与或|、按位异或^运算符,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01

最新评论