C语言常见出错专题总结

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C语言常见出错专题总结时间:2010-11-10总结:陈大龙一:主函数错误1:LIBCD.lib(crt0.obj):errorLNK2001:unresolvedexternalsymbol_main[未解决外部符号_main]代码如下:#includestdio.hvoidmian(){}原因:将main写错写成mian不能正常连接处理即组建,在编译时候没有语法错误能通过,但组建就不行!改错:只要将mian改为main即可2:a.cpp(6):warningC4508:'main':functionshouldreturnavalue;'void'returntypeassumeda.cpp(11):errorC4716:'a':mustreturnavalue[功能应该返回一个值,可以返回假定的void类型][必须返回一个值]代码如下:#includestdio.hintmain(){inta();a();}inta(){}原因:自定义函数里没有return语句,也就是没有返回一个确定的值,在主调函数里调用时,不清楚就干脆报错!改错:在自定函数里面,加上return语句即可,或者是改为void函数类型,主函数里最好要加上return语句,虽然编译不出错,但是有时候会出错3:a.cpp(5):errorC2562:'main':'void'functionreturningavaluea.cpp(2):seedeclarationof'main'[main中:void函数功能正返回一个值][看主函数的声明]代码如下:#includestdio.hvoidmain(){return0;}原因:不带返回类型的函数,不需要返回一个值,带返回类型的函数是和returnX;一起来用的改错:将return0;去掉,或是将void改为int;二:语法错误4:cpp(5):errorC2065:'b':undeclaredidentifier[错误,b是未声明的标识符]代码如下:#includestdio.hvoidmain(){inta=4;b=4;}原因:没有对b进行声明一个数据类型,系统不认识;改错:在b的前面进行声明一个数据类型,如intfloatchar等5:syntaxerror:missing';'before'}'[语法错误:在“}“之前少了”;“号]代码如下:#includestdio.hvoidmain(){inta=3}原因:没有在标识符a=3的后面加分号;因为分号是程序语句结束的标志;改错:在a=3的后面加上分号即可6:D:\C\A\a.cpp(4):errorC2059:syntaxerror:')'D:\C\A\a.cpp(4):errorC2143:syntaxerror:missing';'before'{'[对于“)“存在语法错误]#includestdio.hvoidmain(){if(){intb=3;}}原因:在()里面没有任何表达式,属于典型的语法错误改错:在()里面加上表达式即可7:syntaxerror:missing')'before'{'[语法错误,在“{“的前面少了”)”]#includestdio.hvoidmain(){inta=8;if(a8{}},原因:是少了右括号,对于if,for,while,do-while,switch,函数的语句等会出现以上错误;改错:添加“)“即可;8:syntaxerror:missing']'before';'[语法错误,在“;“号的前面少了”]“]#includestdio.hvoidmain(){inta[5;}原因:少了“]“,对于一维数组,二维数组,多维数组可能会出现以上错误;改错:在其后面加上“]“即可9:D:\C\A\a.cpp(7):errorC2046:illegalcaseD:\C\A\a.cpp(8):errorC2043:illegalbreak[违法的case,break语句]代码如下:#includestdio.hvoidmain(){inta=8;switch(a)case0:break;case1:break;}原因:因为switch语句必须加上大括号,才是完整的结构语句,如果没有加上的话,属于违法,系统不认识;改错:需要在switch(X)语句后面加上大括号即可10:D:\C\A\a.cpp(5):errorC2143:syntaxerror:missing':'before';'D:\C\A\a.cpp(7):errorC2143:syntaxerror:missing':'before';'[语法错误,在“;“的前面少了”:“]代码如下:#includestdio.hvoidmain(){inta=8;switch(a){case0;break;case1;break;}}原因:在switch语句中,case后面必须是“:“,而不是分号;改错:在每个case语句后面换成“:“即可11:errorC2450:switchexpressionoftype'float'isillegal[switch语句中的float表达式是违法的]#includestdio.hvoidmain(){inta=8;floatf=23.8switch(f){case0:break;case1:break;}}原因:在switch语句中,后面的括号应该填入表达式的类型为整型:包括整数和字符型,其他类型都属于违法;改错:在switch语句后面的括号填入整型的表达式;12:D:\C\A\a.cpp(6):errorC2051:caseexpressionnotconstantD:\C\A\a.cpp(10):warningC4060:switchstatementcontainsno'case'or'default'labels[选择表达式情况不明确][开关声明不含”case”或默认的标签]#includestdio.hvoidmain(){inta=3;switch(a){case3+a:break;}}原因:对于case语句后必须是一个常量值或是常量表达式,不能是带变量的表达式,最终的值不明确。改错:只需要在case后面的表达式改为常量或是常量值;13:errorC2440:'initializing':cannotconvertfrom'char[2]'to'char'[初始化错误,不能将2个字符转化为字符]#includestdio.hvoidmain(){chara=a;}原因:不能将字符串类型赋值给单个的字符!因为他们的类型不一样,属于非法;改错:将=”a”改为’a’;即可14:errorC2041:illegaldigit'8'forbase'8'[错误C2041:不合法的数字的8–对于八进制而言]#includestdio.hvoidmain(){inta=081;}原因:虽然可以用二进制,八进制,十六进制赋值给int型,但八进制是用0-7进行表示的,0的后面是小于8的数字,所以是非法改错:只要是小于8的即可前面是0表示的八进制数。15:出现对话框,显示该内存不能为”writtrn”;[在输入scanf函数的时候,忘记变量的地址符&]#includestdio.hvoidmain(){charnum;scanf(%d,num);}原因:因为没有地址符,所以不能存放数据到电脑内存中,所以就会报内存错误;改错:在变量的前面加上地址符&即可16:虽然加了条件判读语句。但没有出所要的结果;[虽然语法没有错误,但出现逻辑错误]#includestdio.hvoidmain(){if(12);printf(Thisistrue!\n);}原因:在if语句的后面加上了不该加的;号,相当于执行了空语句!改错:把“;”去掉即可!17:errorC2065:'b':undeclaredidentifier[错误,b是未声明的标识符]#includestdio.hvoidmain(){inta=4,B=3;if(ab){printf(%d\n,b);}}原因:在程序中有一个大写的B和小写的b,使用b的时候,没有进行声明,误把大写的B当做小写的b;改错:把变量的声明和定义改成一致即可!18:没有出现正确的结果,结果与要求不符合[逻辑错误]#includestdio.hvoidmain(){inta=1;if(a=2)printf(%d\n,a);}原因:误将a=2,当做a==2,将赋值表达式当做关系表达式,a=2当做a为非1的数据,永远为真!当a==2返回一个逻辑值为假.改错:将a=2,改为a==2;19:数组的最后一个元素值是莫名奇妙的值;[数组下标越界,访问不到元素值,返回系统默认值]#includestdio.hvoidmain(){inta[5]={23,56,78,0,12};for(inti=0;i=5;i++){printf(%d,a[i]);}}原因:数组的下标从0开始计算,所以最后的5是根本访问不到,系统会给一个默认值,但不可预测;改错:将=5改为5即可,如果从0开始计算的话,一般是到最大长度减一20:E:\C\A\a.cpp(3):errorC2065:'add':undeclaredidentifierE:\C\A\a.cpp(5):errorC2373:'add':redefinition;differenttypemodifiers[错误:add未进行声明][错误:add需要重新界定,他是不同的类型]#includestdio.hvoidmain(){printf(%d\n,add(2,4));}intadd(inta,intb){returna+b;}原因:没有对自己定义的函数进行声明,所以系统不认识!改错:1,把函数放在调用函数的前面进行声明,或是将函数放在主函数前面进行定义!21:E:\C\A\a.cpp(4):errorC2660:'add':functiondoesnottake1parameters[错误,功能函数没有只取一个参数]#includestdio.hvoidmain(){intadd(inta,intb);printf(%d\n,add(2));}intadd(inta,intb){returna+b;}原因:在函数调用的时候,填入的参数与自己定义的不相同,少了一个参数;改错:在调用的时候,要注意填入两个参数,也就是与自己定义的函数的参数类型一致,个数相同。22:E:\C\A\a.cpp(7):errorC2065:'add':undeclaredidentifier[未对add函数进行声明定义]intads(inta,intb){returna+b;}#includestdio.hvoidmain(){printf(%d\n,add(2,3));}原因:在主调函数里调用了没有定义的add函数;改错:在调用add函数之前,要进行声明定义,将ads改为add23:E:\C\A\a.cpp(3):errorC2146:syntaxerror:missing')'beforeidentifier'add'E:\C\A\a.cpp(3):errorC2059:syntaxerror:')'[在标识符add前面少了“;”号][语法错误]#includestdio.hvoidmain(){printf(%d\nadd(2,3));}原因:只是少了一个逗号,在add(...)前面;并不是少了逗号,要前后来看改错:在add(...)前面加上逗号即可

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功