写坏C程序的几大诀窍
如果你常常按照下面方式写程序,可以保证你的程序经常出错,你也经常头疼。
--------------------------------------------------------------------------------
1) 根本不管程序的格式,把程序写得老师也看不懂(自己当然更看不懂)。
用格式迷惑自己也是弄坏程序的绝招。例如:
if (a > 0)
if (x == y) {
....
};
else {
....
}
请自己分析这到底是什么意思。
--------------------------------------------------------------------------------
2)不关心scanf或者printf中格式串和对应参数类型匹配的问题。例如(假设x, y是double类型,n是int类型)写:
printf("%d, %f", x, n);
scanf("%d %f", &x, &y, &n);
这样可以保证输入输出总出现莫名其妙的问题,而且你和别人都找不到原因。
--------------------------------------------------------------------------------
3)写scanf时,在接收输入值的变量名之前不写&符号。
这样做常常还可以顺便摧毁你所使用的计算机系统,给自己再多找点麻烦,有自制病毒之妙。
--------------------------------------------------------------------------------
4)写注释时随便地忘记几个结束符号。例如:
x = y + 1; /* ha ha ha
z = x * 2; /* fine fine fine */
这样可以保证编译程序“按照你的指示”把你的一段代码吃掉。
--------------------------------------------------------------------------------
5)在比较的时候用 = 代替 ==。例如:
if (x = y)
z = x + 5;
这可以保证x和y一定相同,而是否执行赋值就看你的运气了。
--------------------------------------------------------------------------------
6)定义局部变量后,不初始化就使用。例如:
int fun(int n) {
int m;
return n + m;
}
如果对指针变量这样做,常可以带来隐秘的破坏效果,让最有经验的人也难找到毛病的根源。例如写:
int fun(int n) {
int* p;
*p = n*n;
return *p + n;
}
这样做有时可以顺便摧毁你用的计算机系统,再给自己多找点麻烦。
--------------------------------------------------------------------------------
7)函数定义为有返回值的,但(有时)却不去写return(101-102页)。
这样做可以保证你的程序不时出现古怪行为。
--------------------------------------------------------------------------------
8)不关心变量的范围,例如对循环次数很多的变量用 short 类型做循环等。
这样做可以得到不明不白的结果;有时还可以使程序永不停止,直到你用的计算机累死为止。
--------------------------------------------------------------------------------
9)用sizeof运算符去计算函数的数组参数的大小,或者计算字符串的大小。
这样做一般可以保证计算结果错误,出现的问题难以预料。
--------------------------------------------------------------------------------
10)不写函数原型说明,采用过时原型说明形式(103-107页),或者故意写错误的原型说明。
这样做一般都能骗过编译程序,阻止它帮助你检查程序错误,使你自己麻烦多多。
--------------------------------------------------------------------------------
11)定义带参数宏的时候尽量节约括号,省得写起来麻烦。
这样可以保证在使用宏的地方不时地出现隐含错误,就像埋下的地雷,检查源程序也很难发现。