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     }
  • 相关阅读:
    反射式光电开关QRE1113
    labview程序性能优化
    labview中小黑点,小红点
    简述时钟周期、机器周期、指令周期的概念及三者之间的关系
    C++中的#和##运算符
    NTC与PTC压敏电阻在电源电路中起的作用
    常用DC-DC;AC-DC电源芯片
    PC817与TL431的配合电路探讨
    React入门
    WebRTC网关服务器单端口方案实现
  • 原文地址:https://www.cnblogs.com/suanguade/p/5970939.html
Copyright © 2011-2022 走看看