我就是喜欢用宏

Posted Nemesis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我就是喜欢用宏相关的知识,希望对你有一定的参考价值。

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

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

 

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

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

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

 

 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     }

 

以上是关于我就是喜欢用宏的主要内容,如果未能解决你的问题,请参考以下文章

优雅地用宏实现环形缓冲区

优雅地用宏实现环形缓冲区

优雅地用宏实现环形缓冲区

用宏定义代替printf函数

vc++2010设置和c#一样的代码段,vs2010 两下tab设置

我应该如何使用 Outlook 发送代码片段?