zoukankan      html  css  js  c++  java
  • 我就是喜欢用宏

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

    不过,实话实说,看着是有点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     }
  • 相关阅读:
    integer比较
    String比较
    StringBuffer的s1.capacity()是多少?
    时间复杂度
    京东面试--总结
    说下Java堆空间结构,及常用的jvm内存分析命令和工具
    linux下jmap,jstat和jstack使用
    jvm 性能调优工具之 jmap
    jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
    android小技巧:在activity中实现与绑定的fragment的回调
  • 原文地址:https://www.cnblogs.com/suanguade/p/5970939.html
Copyright © 2011-2022 走看看