有些宏 不得不知道

一、內存字節分配對齊

<1>c++

#define DEFAULTSIZE 8ide

long AlignUp(long lSize)spa

{內存

return (lSize + DEFAULTSIZE - 1) & ~(DEFAULTSIZE - 1);it

}編譯

<2>class

template< typename N >程序

inline N AlignUp( N n, unsigned long nAlign ) throw()im

{margin

return( N( (n+(nAlign-1))&~(N( nAlign )-1) ) );

}

這個內存分配策略是按什麼分配的

long lTotalSize = AlignUp( lLength+1, 8 );

二、宏判斷程序是由c仍是c++編譯

#ifdef __cplusplus

cout << c++ << endl;

#else

cout << c << endl;

#endif

三、利用宏獲得字的高位和低位字節

#define WORD_LO(x) ((byte)((word)(x)&255))

#define WORD_HI(x) ((byte)((word)(x)>>8))

四、獲得結構體重field的偏移量和所佔字節數

#define FPOS(type, field)((dword)&((type*)0)->field)

#define FSIZ(type, field)sizeof(((type*)0)->field)

五、交換兩個數

SWAP(x,y){(x)=(x)^(y);(y)=(x)^(y);(x)=(x)^(y);}

a ^= b ^= a;

六、不用三目運算求最大/最小的一個

((a + b) + abs(a - b))/2

((a + b) - abs(a - b))/2

相關文章
相關標籤/搜索