以下代码将产生精度丢失。
#define DELAY_MILLISECONDS 10000
char time;
time = DELAY_MILLISECONDS;
WaitTime( time );
代码的本意是想产生10秒钟的延时,然而由于time为字符型变量,只取DELAY_MILLISECONDS的低字节,高位字节将丢失,结果只产生了16毫秒的延时。
<规则10> 防止操易混淆的作符拼写错误。
形式相近的操作符最容易引起误用,如C/C++中的“=斢霌==敗 斢霌 敗&斢霌&&數龋羝葱创砹耍嘁肫鞑灰欢芄患觳槌隼础_
示例:如把“&斝闯蓳&&敚蚍粗_
bRetFlag = ( pMsg -> bRetFlag & RETURN_MASK ) ;
被写为:
bRetFlag = ( pMsg -> bRetFlag && RETURN_MASK ) ;
<规则11> 使用无符号类型定义位域变量。
示例:
typedef struct
{
int bit1 : 1;
int bit2 : 1;
int bit3 : 1;
} bit;
bit.bit1 = 1;
bit.bit2 = 3;
bit.bit3 = 6;
printf("%d, %d, %d", bit.bit1, bit.bit2, bit.bit3 );
输出结果为:-1,-1, -2,不是: 1,3,6.
<规则12> switch语句的程序块中必须有default语句。
对不期望的情况(包括异常情况)进行处理,保证程序逻辑严谨。
<规则13> 当声明用于分布式环境或不同CPU间通信环境的数据结构时,必须考虑机器的字节顺序,使用的位域也要有充分的考虑。
比如Intel CPU与68360 CPU,在处理位域及整数时,其在内存存放的撍承驍,正好相反。
示例:假如有如下短整数及结构。
unsigned short int exam ;
typedef struct _EXAM_BIT_STRU
{ /* Intel 68360 */
unsigned int A1 : 1 ; /* bit 0 2 */
unsigned int A2 : 1 ; /* bit 1 1 */
unsigned int A3 : 1 ; /* bit 2 0 */
} _EXAM_BIT ;
如下是Intel CPU生成短整数及位域的方式。
内存: 0 1 2 ... (从低到高,以字节为单位)
exam exam低字节 exam高字节
内存: 0 bit 1 bit 2 bit ... (字节的各撐粩)
_EXAM_BIT A1 A2 A3
如下是68360 CPU生成短整数及位域的方式。
内存: 0 1 2 ... (从低到高,以字节为单位)
exam exam高字节 exam低字节
内存: 0 bit 1 bit 2 bit ... (字节的各撐粩)
_EXAM_BIT A3 A2 A1
#define DELAY_MILLISECONDS 10000
char time;
time = DELAY_MILLISECONDS;
WaitTime( time );
代码的本意是想产生10秒钟的延时,然而由于time为字符型变量,只取DELAY_MILLISECONDS的低字节,高位字节将丢失,结果只产生了16毫秒的延时。
<规则10> 防止操易混淆的作符拼写错误。
形式相近的操作符最容易引起误用,如C/C++中的“=斢霌==敗 斢霌 敗&斢霌&&數龋羝葱创砹耍嘁肫鞑灰欢芄患觳槌隼础_
示例:如把“&斝闯蓳&&敚蚍粗_
bRetFlag = ( pMsg -> bRetFlag & RETURN_MASK ) ;
被写为:
bRetFlag = ( pMsg -> bRetFlag && RETURN_MASK ) ;
<规则11> 使用无符号类型定义位域变量。
示例:
typedef struct
{
int bit1 : 1;
int bit2 : 1;
int bit3 : 1;
} bit;
bit.bit1 = 1;
bit.bit2 = 3;
bit.bit3 = 6;
printf("%d, %d, %d", bit.bit1, bit.bit2, bit.bit3 );
输出结果为:-1,-1, -2,不是: 1,3,6.
<规则12> switch语句的程序块中必须有default语句。
对不期望的情况(包括异常情况)进行处理,保证程序逻辑严谨。
<规则13> 当声明用于分布式环境或不同CPU间通信环境的数据结构时,必须考虑机器的字节顺序,使用的位域也要有充分的考虑。
比如Intel CPU与68360 CPU,在处理位域及整数时,其在内存存放的撍承驍,正好相反。
示例:假如有如下短整数及结构。
unsigned short int exam ;
typedef struct _EXAM_BIT_STRU
{ /* Intel 68360 */
unsigned int A1 : 1 ; /* bit 0 2 */
unsigned int A2 : 1 ; /* bit 1 1 */
unsigned int A3 : 1 ; /* bit 2 0 */
} _EXAM_BIT ;
如下是Intel CPU生成短整数及位域的方式。
内存: 0 1 2 ... (从低到高,以字节为单位)
exam exam低字节 exam高字节
内存: 0 bit 1 bit 2 bit ... (字节的各撐粩)
_EXAM_BIT A1 A2 A3
如下是68360 CPU生成短整数及位域的方式。
内存: 0 1 2 ... (从低到高,以字节为单位)
exam exam高字节 exam低字节
内存: 0 bit 1 bit 2 bit ... (字节的各撐粩)
_EXAM_BIT A3 A2 A1