我就是喜欢用宏

这宏,我写的,怎么看怎么顺眼,能用宏,为什么要写函数呢,费事不讨好,而且还有可能影响效率

不过,实话实说,看着是有点low。。。

 

如果Windows的编译器能支持gcc的那种 ({}) ,的话,这个宏我能写得更完美,

就不用像最后,还得单独一行写宏,然后再起一行if __ret 了,

那样的话,代码会更好看。

 

其实,这样写还可能出现另一个问题,就是类型不兼容的警告,

这需要 typeof 关键字来解决,但是。我上哪找去。

 

复制代码
 1 //    判断 __src 的长度 __srcLen 是否小于 __dstLen ,如果是的话,
 2 //    那么就用 __memType 和 __tag 重新申请一块内存,否则不动,
 3 //    不动、重新申请成功,__ret 返回 1
 4 //    申请失败,__ret 返回 0
 5 //    原始地址指针PP,原始内存长度PD,目标长度DW,内存页属性DW,TAG,返回值PD
 6 #define ComperMemoryAlloc(__src, __srcLen, __dstLen, __memType, __tag, __ret)            \
 7     do {                                                                                \
 8         LPVOID pv = NULL;                                                                \
 9         *(__ret) = 1;                                                                    \
10         if (*(__srcLen) < (__dstLen))                                                    \
11         {                                                                                \
12             pv = ExAllocatePoolWithTag((__memType), (__dstLen), (__tag));                \
13             if (pv)                                                                        \
14             {                                                                            \
15                 ExFreePoolWithTag(*(__src), (__tag));                                    \
16                 *(__srcLen) = (__dstLen);                                                \
17                 *(__src) = pv;                                                            \
18                 *(__ret) = 1;                                                            \
19             }                                                                            \
20             else                                                                        \
21             {                                                                            \
22                 *(__ret) = 0;                                                            \
23             }                                                                            \
24         }                                                                                \
25     } while (0)
复制代码

 

不过,至于使用方法。。。

有点自己给自己找罪受的感觉

复制代码
 1     DWORD dwRet = 0;
 2     ComperMemoryAlloc(&p, &dwLen, 200, NULL, 0, &dwRet);
 3     if (dwRet)
 4     {
 5 
 6     }
 7     else
 8     {
 9 
10     }
复制代码

 

posted @   穷到底  阅读(206)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示