news 2026/5/11 3:19:06

C++扫盲系列|宏定义

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++扫盲系列|宏定义

最近看了下b站的GAS教程,发现了里面有一些源码看不懂,然后想着去熟悉一下,就发现了其中有个概念叫做宏。所以今天我们就花一点是时间来解读一下这个宏
参考文档:
https://www.runoob.com/cplusplus/cpp-preprocessor.html
【55】C++的宏_哔哩哔哩_bilibili这个大神关于宏的讲解非常的清晰,是一个值得一看的教程。

其实就是预处理,预处理的过程就是编译的前一步,在编译之前需要先做这一件事。这个过程能其实就是复制一些定义了的文件然后到这里。预处理呢一般是由#开头的,比如常见的这个#include。

介绍几个常见的宏

define 预处理

这个指令呢一般用于创建符号常量,统称为宏,指令的一般形式是#define macro-name replacement-text

条件编译

有一些指令呢可以选择性的对部分源码进行编译。这个过程就是条件编译

#ifdef NULL #define NULL 0 #endif

也可以在调试的时候进行编译比如,

#ifdef DEBUG cerr << "Variable x=" << x << endl; #endif
  • **宏的定义与预处理器关系

    00:04

    **:宏是利用 C++ 预处理器实现的功能,预处理器在编译前进行文本编辑,处理以哈希开头的预处理器指令,宏本质是代码中的文本替换,区别于模板(模板在编译阶段评估,宏在预处理器阶段纯文本替换)。

  • **宏的基础使用示例

    03:52

    **:通过定义#define WAIT std::cin.get,在代码中用WAIT;替代std::cin.get();,预处理器会在编译前将WAIT替换为std::cin.get;还举例定义#define OPEN_CURLY {,用其替代代码中的左花括号,强调此类简单替换无实际意义,不建议用于混淆代码。

  • **带参数宏的使用

    07:53

    **:定义#define LOG(x) std::cout << x << std::endl,在代码中用LOG("Hello");实现打印功能,预处理器会将LOG("Hello")替换为std::cout << "Hello" << std::endl,并提及该方式可用于简化日志打印,在复杂日志系统中有用。

  • **宏在调试与发布模式下的应用

    09:21

    **:在项目属性的 C/C++ 预处理器中定义PR_DEBUG(调试模式),通过#if defined(PR_DEBUG)定义LOG(x)为打印语句,#else定义LOG(x)为空,实现调试模式保留日志代码、发布模式删除日志代码,避免泄露信息且提升性能。

  • **宏定义的细节与技巧

    14:19

    **:建议将宏定义为带值形式(如#define PR_DEBUG 1),便于控制启用 / 禁用;可使用反斜杠\实现多行宏定义,如将主函数相关代码拆分行用反斜杠连接定义为宏,需注意反斜杠后无空格,否则会错误转义空格。

  • **宏的其他实用场景与后续内容提示

    16:03

    **:宏可用于调试时插入内置预处理器符号(如__FILE__获取文件路径、__LINE__获取代码行号),还可替换new关键字跟踪内存分配(如记录分配字节数、文件及行号);后续视频将深入宏的高级示例与特定应用场景,还提及 OpenGL 系列视频中有宏的实际应用案例(如包装 OpenGL 函数调用自动查错)。

  • **使用宏的注意事项

    02:57

    **:不建议过度使用宏,因其会增加代码理解难度,编写代码应追求清晰易懂,而非刻意使用多种 C++ 特性炫耀;定义宏时需注意分号位置(如不在宏定义末尾加分号,在代码调用时加,避免语法错误),且宏命名建议加项目前缀(如PR_),避免与其他宏冲突。

这里打算写一个系列的教程来帮助自己解决没次都想做完完美的这样一个性格,点个关注吧,后续会努力更新一些高质量文章并带一些实际的案例 ,respect

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 1:31:06

<span class=“js_title_inner“>团队准备解散了…</span>

朋友团队解散了&#xff0c;5年大厂java经验&#xff0c;当天签字、办手续走人&#xff0c;一气呵成&#xff0c;真让人唏嘘。。。本以为&#xff0c;凭借经验能很快找到工作&#xff0c;但发现今年传统java岗少之又少&#xff0c;hr直言&#xff0c;现在行情不好&#xff0c;自…

作者头像 李华
网站建设 2026/5/11 2:19:05

SMMU 架构与落地方案(三):缓存一致性机制全景解析

引言在现代 SoC 设计中&#xff0c;System MMU (SMMU) 不仅负责地址转换&#xff0c;更是系统一致性域&#xff08;Coherency Domain&#xff09;中的关键组件。本文将基于 ARM SMMUv3 架构规范&#xff08;IHI0070G.a&#xff09;&#xff0c;深入剖析 SMMU 如何处理自身访问的…

作者头像 李华
网站建设 2026/5/10 7:40:41

多智能体大模型实战打造技术雷达与研发深度助手

本文提出基于多智能体的技术溯源与盲点发现系统&#xff0c;采用Master-Worker架构和Steerable ToDo机制实现长时程规划。系统整合学术、代码和专利分析智能体&#xff0c;通过知识缺口反思算子主动发现企业技术盲点&#xff0c;提升研发效率50%以上&#xff0c;提供战略洞察和…

作者头像 李华
网站建设 2026/5/10 15:12:31

<span class=“js_title_inner“>2026信创目录正式落地|告别“替代时代”,万亿赛道新机遇全解析(采购必看!)</span>

“十五五”开局之年&#xff0c;信创产业迎来里程碑式节点&#xff01;2026年1月16日&#xff0c;中国信息安全测评中心正式发布信创核心准入目录&#xff08;第1号公告&#xff09;&#xff0c;有效期三年&#xff1b;与此同时&#xff0c;信创世界同步推出产业生态全景图谱&a…

作者头像 李华