aihot  2017-05-09 16:32:26  OpenCV |   查看评论   

正确的定义为: 
#define REC_AREA(a, b) ((a) * (b)) 

<规则5> 宏所定义的多条表达式应放在大括号内。 
示例:下面的语句只有宏中的第一条表达式被执行。为了说明问题,for语句的书写稍不符规范。 
#define INIT_RECT_VALUE( a, b ) \ 
a = 0 ; \ 
b = 0 ; 

for ( index = 0 ; index < RECT_TOTAL_NUM ; index ++ ) 
INIT_RECT_VALUE( rect.a, rect.b ) ; 

正确的用法应为: 
#define INIT_RECT_VALUE( a, b ) \ 
{ \ 
a = 0 ; \ 
b = 0 ; \ 


for ( index = 0 ; index < RECT_TOTAL_NUM ; index ++ ) 

INIT_RECT_VALUE( rect[ index ].a, rect[ index ].b ) ; 



<规则6> 宏定义不能隐藏重要的细节,避免有return,break等导致流程转向的语句。 
如下例子是不规范的应用,其中隐藏了程序的执行流程。 
#define FOR_ALL for(i = 0; i < SIZE; i++) 

/* 数组 c 置0 */ 
FOR_ALL 

c[i] = 0; 


#define CLOSE_FILE { \ 
fclose(fp_local); \ 
fclose(fp_urban); \ 
return; \ 


<规则7> 使用宏时,不允许参数发生变化。 
下面的例子隐藏了重要的细节,隐含了错误。 
#define SQUARE ((x) * (x)) 



w = SQUARE(++value); 
这个引用将被展开称: 
w = ((++value) * (++value)); 
其中value累加了两次,与设计思想不符。正确的用法是: 
w = SQUARE(x); 
x++; 

<规则8> 当if、while、for等语句的程序块为摽諗时,使用搟}敺拧_ 
while ( *s++ == *t++ ) ; 
以上不符合规范,正确的书写方式为: 
while( *s++ == *t++ ) 
 

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

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