首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > C/C++ > 【基础】程序中遇到的一个小陷阱
【标  题】:【基础】程序中遇到的一个小陷阱
【关键字】:
【来  源】:http://blog.csdn.net/dongpy/archive/2006/11/16/1388265.aspx

【基础】程序中遇到的一个小陷阱

 

typedef unsigned int UINT;
#define SetBlockHeadSize(pInfo, dwords)  ( (*(pInfo) &= 0x3 ) |= ( (dwords)<<2) )
#define GetBlockHeadSize(pInfo) ( *(pInfo) >> 2 )        //返回DWORD数
int main(int argc, char* argv[])
{
    UINT a1 
= 0x10;
    UINT a2 
= 0x10;
    SetBlockHeadSize( 
&a1, GetBlockHeadSize(&a1)+GetBlockHeadSize(&a2) );
    
return 0;
}

SetBlockHeadSize( &a1, GetBlockHeadSize(&a1)+GetBlockHeadSize(&a2) )执行时,

首先执行表达式*(&a1)&= 0x3,就改变了a1的值,所以后面GetBlockHeadSize(&a1)计算的值不是预期的了。

改正:先计算int newSize = GetBlockHeadSize(&a1)+GetBlockHeadSize(&a2)的值

或者改成:#define  SetBlockHeadSize(pInfo, dwords)  ( *(pInfo) = *(pInfo) &0x3 |( (dwords)<<2) )

或者定义成函数,

void setBlockHeadSize( UINT* pInfo, UINT dwords )
{
     (*(pInfo) &= 0x3 ) |= ( (dwords)<<2);
}

如何控制设备驱动程序的加载顺序:【上一篇】
SDK编程笔记 — 计时器篇:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • 以太网技术的四个转变
  • [j2me Q&A]WTK初始化WMAClient报错"XXX has no IP address"的解释
  • 重定向与dup
  • 限制BT方法大全
  • 提高C++性能书摘
  • 中小型MIS开发之我见(二)---具体实施(上)
  • 遍历目录实现删除,取得大小及深度
  • 启用新插件,给Photoshop CS2加加速
  • 完美解决不修改NTLDR,最后一次正确配置的问题
  • 思科培训——为我搭建梦想的桥梁
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.