一、C语言初学者常犯错误:
1.“==”误写成“=”
2.case后忘了加break
3.scanf中忘了&
4. for后想用复合语句却忘了加”{}”
5. #开头的预编译指令后误加了”;”
6. 符号用了中文输入法
7. i++与++i混淆
8.实现swap()函数时没有使用指针作为参数
9. 忘了数组的合法下标范围是[0,N-1]
10. 用字符数组存放字符串时忘了为’\0’留位置
11. malloc()后忘了free()
12. fopen()后忘了fclose()
13. #include自己的文件时应该用”XXX.h”而不是
14. 使用绘图函数时忘了在TC中选中Options->Linker->Libraries->Graphic Library
15. 误认为sizeof(int)永远等于2
16. 3/2等于1而不是1.5
17.混淆&&和&,混淆单引号和双引号
18. 忘了写函数的返回类型.没有返回类型时要写void,如果不写会默认返回int(对于老编译器)
19. 误将局部变量的地址针返回
20. 对文件开发时,将.c与.cpp文件混用(会引发LNK ERROR)
21. 结构体定义的”}”后忘了加”;”
22. 结构体名前忘了加struct(对于老编译器)
23. 混淆”.”与”->”
24. 递归无法终止(引发Stack Overflow)
25.while的退出条件写倒了
26. 在while循环中忘了让某个东西++,导致死循环. while循环前忘了给循环变量赋初值
27. 指针被释放后又继续使用;或某一地址被其他的指针释放了,后来又试图访问那块地址
28. 同一个地址被free()两次
29. 文件名路径中忘了用”\\”替代”\”
30. 变量忘了赋初值
二. 若干建议/提醒
1. 给float型变量赋值别忘了在数字后加f,如 float num=5.0f , 输入输出double型变量时用%lf而不是%d
2. 注意缩进,最好用Tab键缩进而非空格键
3. 变量和函数的名字要有意义,长度平均为8~10,最忌使用x,xx,a之类的名字
4. 大括号先成对写出,再往里面追加内容
5. 合理使用空行
6. 注释写在一行的后面或上面,不要写在下面. 更新代码时别忘了更新注释
7. 直接make或build, 不需要先compile再link
8. 调试时加倍注意边界情况
9. 为了减少手动输入的痛苦,调试时合理使用文件输入
10. TC中单步运行为F8, Trace into为F7; VC中单步运行为F10, Trace into为F11
11. 合理使用断点(breakpoint)和监视(watch)
12. VC中想要查看运行结果,可以在程序最后加上一个或两个getchar()
13. 不用的语句先注释掉,而不是删掉
14. 变量和函数名中合理使用大小写
15. 对数组初始化为0的工作,试试memset()函数
16. 运行时出现含有”access violation”字样的错误提示框,多半是指针错误或数组越界
17. 指针声明时和释放后马上赋值为0, 使用前尽量先检查它是否为0
18. for循环的头部内部要做其他事情
19. 浮点数永远存在误差!不要判断一个浮点数是否为0,取而代之的是判断它是否在0左右; 1.0/10.0并不等于0.1(可能是0.0999999999)
20. getchar()可能会把上一次的回车读入
21. 当文件读取完后,再试图读了一次,feof()才会返回真
22. 少用全局变量,尽量用参数传递信息
23. 指针也可以用”[ ]”,与数组相同
24. 合理使用条件表达式的”短路”功能,如 if(p!=0&&*p==’a’){…….}
25. 定义char *p=”……”;后不能修改字符串的内容,如 p[2]=’a’ 是错误的
26. 多用#define定义常量,少出现数字
27. return后不用加括号
28. 谨慎使用带参数的#define
三.加强注意
1. 算术转换 。 任何运算符在计算时都会引起转换,以类似的方式产生结果类型。如 int 和 double 型相加,int 型的操作数会先被转变为 double 型,而后做加法运算。
2. 运算次序 。编写程序时,除了要注意运算符的优先级外,还要注意运算次序。
3. 不要将定义为某个函数内部局部变量的指针作为该函数的返回值