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;
}
#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);
}