1 @@ -348,7 +348,7 @@ case "$DISTRO" in
2 - rm -rf /usr /lib/nvidia-current/xorg/xorg
3 + rm -rf /usr/lib/nvidia-current/xorg/xorg
恩,确实没有比这个更愚蠢更严重的错误了!
把
1 int main() {...}
硬是写成了
1 int mian() {...}
编 译不通过,自己也硬是折腾了两个小时。开始,使用的是Code::Blocks,以为是IDE故障;后来,换成Visual Studio,问题依旧。紧接着,考虑到是不是自己的计算机问题,换成同学的计算机,问题依旧。我的代码没有逻辑问题呀,很简单。我甚至删除了所有的函 数、语句块,只留下一句:
1 printf("hello world!\n");
那时,我真的快哭了!也就是在某个瞬间,发现main这个单词写错了。亲身经历的故事,很愚蠢是吧!可是我依旧很怀恋初学C语言的那段日子。
忽略编译警告,或者编译警告没有全开。认真阅读编译器信息,它能解决很多你本来要花很长时间才能找到的问题。注意,很多经典的情况,编译器都会给警告,完全不需要通过所谓编程规则去限制,例如:
1 if ( p = NULL ) {}
很多书会推荐人写 NULL == p 这种模式,其实完全没有必要,因为这种错误编译器会检查出来。
1 pansz-pc:/tmp$ gcc -Wall 1.c
2 1.c: In function ‘main’:
3 1.c:6:5: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
4 if ( p = NULL ) {
5 ^
下面来看另外一个例子:
1 #include
2 int main()
3 {
4 unsigned char i;
5 for (i = 0; i <= 255; i++) {
6 printf("%d\n", i);
7 }
8 return 0;
9 }
上面这段代码很多人觉得不会给警告,但它是有的:
1 pansz-pc:/tmp$ gcc -Wall -W 1.c
2 1.c: In function ‘main’:
3 1.c:7:5: warning: comparison is always true due to limited range of data type [-Wtype-limits]
4 for (i = 0; i <=255; i++)
5 ^
实际上,很多问题都是编译器警告能解决的,省掉你很多调试工作。
PS:珍惜生命,请从关爱Warning开始!
1 for (size_t i = vec.size() - 1; i >= 0; -- i) {
2 // .... Do something with vec[i]
3 }
这个蛋疼的写法编译器是会给Warning的,不过忽略Warning不是一个正(yu)常(chun)的程序员(wo)所必须干的事情么。这个错误有时发现不了是因为在循环内可能有break,说不定在中间就出去了。
1 while(…);
2 {
3 ……
4 }
这个,不解释。相信很多人都在这上面摘过跟头。
1 for(int i = 0; i < n; ++j)
这个,呵呵。本人亲历!
使用过python的人都有这个体会,有时候缩进错了,导致逻辑不按预定的来。多打两个空格什么的,最忧伤了!
1 switch( i )
2 {
3 case 0:
4 str = "zero";
5
6 case 1:
7 str = "one";
8
9 case 2:
10 str = "two";
11 }
这个也是广大程序员经常犯的一个低级错误。
最后,总结一句话:吃大写的亏,上小写的当,检拼写的错,查空格的误!这些坑,你踩了几个????