IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:Macros

共 2 篇相关文章

IT 累计浏览 3,096

我所偏爱的 C 语言面向对象编程范式

这篇讲的是作者如何用纯 C 语言实现面向对象编程,而不是直接使用 C++。作者从实际项目需求出发,对比了 C++ 与 C 在封装、继承和多态实现上的根本差异:C++ 依赖编译器的隐式支持,而 C 语言需要通过结构体封装数据、函数指针模拟虚表、手动管理 vtable 指针来显式构建这些机制。 文章重点展示了 C 语言实现的几个巧妙之处:比如用结构体首地址兼容来实现“伪继承”,以及如何通过宏和约定来减少重复的样板代码。作者同时指出,这种做法虽然更底层、更可控,但也意味着开发者需要承担内存布局对齐、手动调用析构等额外责任。 文中给出的结论很明确:对于嵌入式开发、系统编程或需要与 C++ 模块交互的场景,这种轻量级的 OOP 范式能带来更小的二进制体积和更清晰的控制流。而在快速迭代的复杂业务系统中,C++ 原生的面向对象特性仍然更具生产力。

IT 累计浏览 1,499

宏中#和##的用法

这篇讲的是C++预处理器中两个实用但常被忽视的操作符:“#”和“##”。 作者从宏的基本用法切入,清晰地拆解了它们各自的功能。其中,“#”操作符负责将宏参数“字符串化”,也就是把传入的参数名称变成一个字符串常量。而“##”则是一个“标记粘贴”操作符,它能把左右两边的标识符(token)直接拼接成一个全新的标识符。 文章通过简洁的代码示例展示了它们的直接效果。例如,使用`#define STR(s) #s`后,`STR(hello)`会被展开为字符串`"hello"`;而`#define CONS(a,b) int(a##e##b)`则能把参数`a`、`e`和`b`粘合,如`CONS(3,2)`会变成`int(3e2)`,即科学计数法表示。 这篇文章的价值在于,它快速厘清了这两个在调试日志或编写高度泛型宏时非常有用的工具,让读者能准确理解并应用它们,避免因混淆而产生的代码错误。