您的位置:首页 > 编程语言 > C语言/C++

规范化的C++编程方法备忘录 常用符号表示方法

2010-04-30 08:26 363 查看
-如果系统对某个操作有自己的一套规则,就尽量使用系统提供的库文件中声明过的符号,不要自己去实现它

例1:不要在系统要求使用 GET_X_LPARAM(a) 的地方使用 (int)(short)((a) & 0xffff) 取代(如GetMessagePos的返回值)。

例2:不要自己实现多字节的crt库,如strinc等。尽可能使用标准的东西。

-注意下面的内容是自定义的,但他们之所以能够这样使用,是基于不以和标准相冲突为原则的!

整数:先设一种整数INTTYPE类型有我们符合要求的位宽,且是被编译器自动支持的,UINTTYPE是其对应的无符号类型

 - 无符号最小值 (UINTTYPE)0; 最大值 ~(UINTTYPE)0 或 (UINTTYPE)-1。

 - 有符号最小值 (INTTYPE)~((UINTTYPE)-1 >> (UINTTYPE)1) ;最大值 (INTTYPE)((UINTTYPE)-1 >> (UINTTYPE)1) ;。

 

指针对齐的方法:先设一种类型 YOURTYPE 是我们针对的类型

 首先要注意的是原来的地址 YOURTYPE * pYourData 已变为不可用。所以最好写一个类或结构体将这种数据包装起来。表达式:

(YOURTYPE *)((size_t)pYourData / sizeof(YOURTYPE *) * sizeof(YOURTYPE *))

 

取结构体成员的内存偏移量:

#define offsetof(s, m) ((size_t)&((s *)NULL)->m)

 

设一种整数INTTYPE类型有我们符合要求的位宽,且是被编译器自动支持的,UINTTYPE是其对应的无符号类型:

取一个无符号整数的最大值,既不超过类型UINTTYPE1也不超过UINTTYPE2的位宽

 - 如果需要的值是类型UINTTYPE1: (UINTTYPE1)(UINTTYPE2)-1

 

设一种整数INTTYPE类型有我们符合要求的位宽,且是被编译器自动支持的,UINTTYPE是其对应的无符号类型:

如果UINTTYPE的位宽未知(或者说,我们不能假定)。比如要构造一个UINTTYPE类型的整数,不超过0xffff

 (UINTTYPE)0xffff

 

设一种整数INTTYPE类型有我们符合要求的位宽,且是被编译器自动支持的,UINTTYPE是其对应的无符号类型:

如果UINTTYPE的位宽未知(或者说,我们不能假定),比如要构造一个UINTTYPE类型的整数,不超过0x10000

 考察0x10000,可知至少可以用一个DWORD完整地包含它。因此表达式为:

 (UINTTYPE)((DWORD)(UINTTYPE)0x00010000 == 0x00010000 ? 0x00010000 : -1)

 

一个类型为YOURTYPE的数组 avar,其元素个数为

#define lengthof(avar) (sizeof(avar) / sizeof(avar[0]))

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 编程 编译器 null