2026/2/21 18:02:29
网站建设
项目流程
新浪短链接生成,成都白帽优化,网站制作计划,备案平台新增网站最近看了下b站的GAS教程#xff0c;发现了里面有一些源码看不懂#xff0c;然后想着去熟悉一下#xff0c;就发现了其中有个概念叫做宏。所以今天我们就花一点是时间来解读一下这个宏 参考文档#xff1a; https://www.runoob.com/cplusplus/cpp-preprocessor.html 【55】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