aihot  2017-05-09 20:01:57  OpenCV |   查看评论   
以下代码将产生精度丢失。 
#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 
 

除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自常见C/C++编码规范(5)

留言与评论(共有 0 条评论)
   
验证码:
[lianlun]1[/lianlun]