|
发表于 2015-7-19 01:18:31
|
显示全部楼层
忽然感觉,这不应该是一个专业人员该犯的错误;
- link:http://bbs.fishc.com/thread-25340-1-1.html
- 《C语言编程之道》-明日科技,《c++程序设计》-谭浩强
- 原文:第四章 开发人员不可忽视的22个技术陷阱-《C语言编程之道》
- 《c++程序实例1200题》
- ======================================================;
- C中注意出现的错误:
- 1.大小写的忽略,这个比较简单也是容易出错的地方,代码就不例举了;
- 变量未定义就使用;或类似指针未赋值的使用;等出现的错误;
- scanf()函数忘记加& 取址符; scanf()函数 输入流格式不对应的错误;
- switch中忘记用break;则每种情况都判断,满足条件都执行;
- 2.{}和()使用不当的错误;
- [code]int n[2][3]={(1,2,3),(4,5,6)};
- ------------------------------
- 程序不能正常输出每个元素;编译{(1,2,3),(4,5,6)};时,先进行括号内的逗号运算(取逗号最后的数值)编译生成{3,6};其它元素为0。正确的写法:{{1,2,3},{4,5,6}};
- ------------------------------
- 3.在 if(),while(),#include,#define,for()后直接加分号的情况;
- if(...); //造成判断语句失效;
- while(...); //没有将变化到结束的条件设置在while()中时,造成死循环;
- #inlucde ...; //造成程序编译时的错误提示,引用库文件出现错误;
- #define DEFINEdata 200; //特殊情况下会造成编译错误;
- 4.不注意各种工具搭配造成的bug冲突;
- [1].unsigned 和循环结构;
- [code] unsigned int i=10;
- for(i;i>=10;i--);//其实只要改成i>0;就OK了;
- [i被定义为无符号整型变量,i的值永远大于等于0;i>=0永远成立]
- while(0);和do{}while(0);//0为假,非0即真;
- 5.do{..}while(); 和while(){...}; 的区别;
- do....while先执行再判断条件是否成立;无论条件是否成立,do....while至少执行一次;
- while 先判断,再执行;条件不成立,就不执行,可能执行0次[即1次不执行];
- 6.数据溢出产生的错误;
- sizeof(int)==4byte;数据最大支持补码数值(-32768 to +32767);
- int num=32768; //超出有效范围造成数据溢出;
- 7.两个int 常量或变量 /结果为 0-1之间的值的时候;合理的定义变量
- [如果除号的两边都为整数,结果为整数;两边有一个实数,结果为实数];
- [code]double i; i=9.5+1/2; (i==9.500000); //之前;
- [code]double i; i=9.5+1.0/2; (i==10.000000); //之后
- <code>
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- //using namespace std;
- int main(void){
-
- char *str=NULL;
- str=(char*)malloc(5);
-
- strcpy(str,"goodluck");
- fprintf(stdout,"%s",str);
- free(str);//如果使用内存没释放也会造成错误的;
- return 0;
- }//编译器优化的结果:所以执行了,可以执行 = =;
- [程序动态分配5字节的内存空间,但是赋值超过了5字符,错误为赋值的数据超过动态分配的空间]
- </code>
复制代码 |
|