If builders built buildings the way programmers write programs, then the first woodpecker that came along would destroy civilization. (如果建筑师盖房子就像程序员写程序一样,那么,第一只到来的啄木鸟就能毁掉我们的文明)~ Gerald Weinberg (born: 1933-10-27 age: 77) Weinberg’s Second Law
for(j=0; j<array_len; j+ =8)
{
total += array[j+0 ];
total += array[j+1 ];
total += array[j+2 ];
/* Main body of
total += array[j+3]; * loop is unrolled
total += array[j+4]; * for greater speed.
total += array[j+5]; */
total += array[j+6 ];
total += array[j+7 ];
}
隐藏宏定义。如:#define a=b a=0-b,当人们看到a=b时,谁也想不到那是一个宏。
换行。如下所示,下面的示例使用搜索xy_z变得困难。
1
2
#define local_var xy\
_z
// local_var OK
代码和显示不一致。比如,你的界面显示叫postal code,但是代码里确叫 zipcode.
隐藏全局变量。把使用全局变量以函数参数的方式传递给函数,这样可以让人觉得那个变量不是全局变量。
使用同意词。如:
1
2
3
#define xxx global_var // in file std.h
#define xy_z xxx // in file ..\other\substd.h
#define local_var xy_z // in file ..\codestd\inst.h
#ifndef DONE
#ifdef TWICE
// put stuff here to declare 3rd time around
void
g(char* str);
#define DONE
#else // TWICE
#ifdef ONCE
// put stuff here to declare 2nd time around<
void
g(void* str);
#define TWICE
#else // ONCE
// put stuff here to declare 1st time around
void
g(std::string str);
#define ONCE
#endif // ONCE
#endif // TWICE
#endif // DONE
注重细节。当你设计一个很复杂的算法的时候,你一定要把所有的详细细设计都写下来,没有100页不能罢休,段落要有5级以上,段落编号要有500个以上,例如:1.2.4.6.3.13 – Display all impacts for activity where selected mitigations can apply (short pseudocode omitted). 这样,当你写代码的时候,你就可以让你的代码和文档一致,如:Act1_2_4_6_3_13()