- 浏览: 370079 次
- 性别:
- 来自: 苏州
文章分类
- 全部博客 (335)
- C++ (190)
- 设计模式 (43)
- 数据库技术 (5)
- 网络编程 (11)
- 自动化测试 (6)
- Linux (13)
- OpenSSL (10)
- MS Crypt API (5)
- SCM (2)
- English (4)
- Android (10)
- EMV规范 (1)
- Saturn Platform (0)
- C (10)
- SQL (2)
- ASP.NET (3)
- 英语口语学习 (3)
- 调试工具 (21)
- 编译技术 (5)
- UML (1)
- 项目管理 (5)
- 敏捷开发 (2)
- Http Server (6)
- 代码审查、代码分析 (5)
- 面试基础 (10)
- 重点知识 (16)
- STL (6)
- Efficient C++资料 (8)
- 数据结构和算法 (7)
- 读书笔记 (0)
- 开源项目 (4)
- 多线程 (2)
- Console App (6)
- 个人开源项目 (4)
- IBM DevelopWorks (4)
- Java (16)
- 内存泄漏相关调试和检测 (13)
- 软件测试相关技术 (2)
- C# (11)
- Apple Related (1)
- 软件测试和管理 (2)
- EMV (1)
- Python (1)
- Node.js (6)
- JavaScript (5)
- VUE (1)
- Frontend (1)
- Backend (4)
- RESTful API (3)
- Firebase (3)
最新评论
-
u013189503:
来个密码吧
[C++][Logging] 项目中写日志模块的实现 -
wyf_vc:
来个密码啊!!
[C++][Logging] 项目中写日志模块的实现
关于这宏定义函数的用法,现在不是特别常见,但是在特殊情况下还是很有用的。
定义如下:
基本实现思路如下, (代码十分简洁明了)
现在回头看看以前的总结http://jacky-dai.iteye.com/admin/blogs/868376,从这里可以看出有的时候宏定义函数还是很好用的。
定义如下:
class StringBuilder { public: StringBuilder(const char8_t* str); virtual ~StringBuilder(); ... virtual StringBuilder& operator<<(const char8_t* value) { return operator+(value); } virtual StringBuilder& operator<<(int8_t value); virtual StringBuilder& operator<<(int16_t value); virtual StringBuilder& operator<<(int32_t value); virtual StringBuilder& operator<<(int64_t value); virtual StringBuilder& operator<<(uint8_t value); virtual StringBuilder& operator<<(uint16_t value); virtual StringBuilder& operator<<(uint32_t value); virtual StringBuilder& operator<<(uint64_t value); virtual StringBuilder& operator<<(double value); virtual StringBuilder& operator<<(const void * value); };
基本实现思路如下, (代码十分简洁明了)
#define OPERATOR_IMPL(Type, Formatter) \ StringBuilder& StringBuilder::operator<<(Type value) \ { \ if ((mSize - mCount) < 64) \ { \ if (!grow(64)) \ { \ mCount = 0; \ return *this; \ } \ } \ mCount += blaze_snzprintf(mBuffer + mCount, mSize - mCount, "%"Formatter, value); \ return *this; \ } OPERATOR_IMPL(int8_t, PRId8); OPERATOR_IMPL(int16_t, PRIi16); OPERATOR_IMPL(int32_t, PRIi32); OPERATOR_IMPL(int64_t, PRId64); OPERATOR_IMPL(uint8_t, PRIu8); OPERATOR_IMPL(uint16_t, PRIu16); OPERATOR_IMPL(uint32_t, PRIu32); OPERATOR_IMPL(uint64_t, PRIu64); OPERATOR_IMPL(double, "f"); OPERATOR_IMPL(const void *, "p");
现在回头看看以前的总结http://jacky-dai.iteye.com/admin/blogs/868376,从这里可以看出有的时候宏定义函数还是很好用的。
- stringbuilder.zip (2.4 KB)
- 下载次数: 2
发表评论
-
FreeRTOS
2022-03-05 16:31 248Ref https://blog.csdn.net/weix ... -
串口通讯相关
2018-11-02 13:44 411https://bbs.csdn.net/wap/topics ... -
[转]C++验证IP是否可以PING通
2018-10-30 17:54 1326https://www.cnblogs.com/guoyz13 ... -
C++/MFC 換皮膚
2018-10-20 11:05 477https://blog.csdn.net/u01123991 ... -
WinCE 截屏 - C++ 代碼
2018-08-31 09:45 574// this function create a bmp ... -
Android NDK搭建環境
2017-11-27 13:25 582https://www.cnblogs.com/ut2016- ... -
8583协议相关
2017-10-17 13:38 5738583相关资料,整理中... -
Java高级应用之JNI
2017-06-19 09:00 600参考link http://www.cnblogs.com/l ... -
C++实现ping功能
2017-04-18 11:21 2155基础知识 ping的过程是向目的IP发送一个type=8的I ... -
OpenSSL 编译环境搭建
2017-03-27 15:01 9061 安裝VS2008到 c:\Program Files (x ... -
最优非对称加密填充(OAEP)
2017-03-25 14:53 1582OpenSSL命令---rsautl http://blog. ... -
[Platform Builder] 设置SVM OS build Env
2016-11-10 11:39 01 copy one OSDesign Project to ... -
[Windows] System Error Codes(GetLastError )0-----5999
2016-10-26 13:28 1881ERROR_SUCCESS 0 (0x0) T ... -
开源Windows驱动程序框架
2016-09-17 21:35 871转自 http://code.csdn.net/news/28 ... -
c/c++代码中执行cmd命令
2016-09-14 14:50 1908转自 http://blog.csdn.net/slixinx ... -
C#使用C++标准DLL实例(包含callback)
2016-09-11 19:44 1086C++编写标准Win32DLL如下 头文件 /***** ... -
C#调用C++的DLL搜集整理的所有数据类型转换方式
2016-09-09 16:07 969转自 http://www.cnblogs.com/zeroo ... -
WinCE CPU使用率计算 测试工具
2016-09-08 16:14 991转自 http://blog.csdn.net/jan ... -
switch在C++与C#中的一些差异
2016-09-08 15:19 810参考链接 http://blog.csdn.net/weiwe ... -
C++ 鼠标模拟程序
2016-09-04 12:09 1612转自 http://blog.csdn.net/weixinh ...
相关推荐
8. **使用#undef取消宏定义**: 如果不再需要某个宏定义,可以使用`#undef`来取消它的定义。 总结来说,`#define`宏定义在C/C++编程中起着重要作用,能够提高代码的灵活性和可维护性。然而,由于宏定义在编译阶段...
### #define宏定义的一些用法总结 #### 一、引言 在C及C++编程中,`#define`是一个非常强大的预处理器指令,用于创建宏。宏可以在编译前阶段替代代码片段,提高代码的复用性与可维护性。本文将详细探讨`#define`的...
- **#define** 主要用于文本替换,既可以定义常量也可以定义函数式的宏。 - **typedef** 主要用于为已存在的类型起一个别名,提高代码的可读性和移植性。 - **#define 和 typedef 的选择**: - 当需要定义一个简单...
### C++/C宏定义(define)中#与##的含义及应用 #### 一、引言 在C++和C语言中,预处理器指令`#define`被广泛用于定义宏,这些宏可以包含简单的替换文本,也可以进行复杂的条件判断和参数处理。本文将详细介绍宏...
`#define`用于宏定义,它可以定义常量、函数或者进行条件编译。例如: ```cpp #define PI 3.1415926 #define MAX(a, b) ((a) > (b) ? (a) : (b)) ``` `#define`的主要缺点在于其仅仅进行文本替换,没有类型检查,...
除了简单的文本替换外,`#define` 还可以用来定义宏函数,即带有参数的宏。这种宏可以接收参数,并且根据这些参数执行特定的操作。 **示例:** ```c #define max(x, y) ((x) > (y) ? (x) : (y)) ``` 上述代码定义...
在C语言中,宏定义是使用预处理器指令#define实现的一种编译前文本替换机制。它在编译之前处理源代码,使得可以定义常量、实现内联函数以及防止头文件被重复包含等多种功能。下面详细说明标题和描述中提到的知识点。...
define 还可以用于定义宏和取消宏,例如: ```c #define PI (3.1415926) #undef PI ``` ### 7. 头文件的包含 define 还可以用于头文件的包含,例如: ```c #ifndef __headerfileXXX__ #define __headerfileXXX__...
2. **`#define`**: 定义一个宏,宏可以是一个简单的替换字符串,也可以是一个带有参数的宏定义。 ```cpp #define MACRO_NAME value ``` 3. **`#endif`**: 与 `#ifndef` 配对使用,表示条件编译的结束。 #### ...
此宏定义启用或禁用IDLE任务钩子函数。在启用的情况下,用户需要实现一个名为vApplicationIdleHook()的函数,该函数在IDLE任务中周期性地执行,可用于操作系统的功能扩展。 6. #define configUSE_TICK_HOOK 0 此宏...
在现代编程实践中,倾向于使用函数调用来代替宏定义,除非在特定情况下宏定义能带来显著的性能优势。例如,在需要极致性能优化的实时系统或嵌入式系统中,适当的宏定义使用仍然是合理的。然而,即使在这种情况下,也...
1. **简单的#define定义** `#define`常用于创建符号常量,比如`#define MAXTIME 1000`。这个定义将`MAXTIME`替换成数值`1000`,在代码中若出现`MAXTIME`,编译器会将其替换为`1000`。与`const`关键字定义的常量不同...
`#define` 是一个宏定义指令,用于定义宏。它可以用来定义常量、函数等。当预处理器遇到被 `#define` 定义的宏时,会将后续代码中的宏名替换为对应的定义。 #### 三、#ifndef 与 #define 的具体应用 ##### 1. 防止...
使用#define定义的宏变量实际上并没有内存地址,它们在预编译时就被替换成了相应的值,或者更准确地说是代码文本。因此,如果在代码中多次使用了#define宏,其替换出来的代码会多次出现在最终的程序中,这会导致最终...
内联函数和宏定义在C语言中都是用来优化程序性能的工具,但它们在使用上有着本质的区别。内联函数提供了更加安全和可调试的代码替代宏定义,尤其是在需要兼顾性能和代码可读性的场景下。 内联函数是C++引入的概念,...
这里,`#ifndef MYHEADER_H` 检查 `MYHEADER_H` 是否已定义,如果没有定义,就执行到 `#define MYHEADER_H` 这一行,定义 `MYHEADER_H` 宏。当这个头文件第一次被包含时,`MYHEADER_H` 未被定义,因此宏会被定义,...
本文将详细介绍C语言宏定义中两个特殊符号的使用:连接符`##`和字符串化符`#`。 #### 连接符`##`(Concatenation Operator) 连接符`##`用于宏展开时合并两个或多个token为一个单一的token。这一特性在构建动态...
除了定义常量之外,`#define` 还可以用来定义函数式宏。这种宏可以接受参数,并在编译时进行替换。例如,下面定义了一个求两个数最大值的宏: ```c #define max(x, y) ((x) > (y) ? (x) : (y)) ``` 需要注意的是,...