C语言常见出错专题总结
时间:2010-11-10
总结:陈大龙
一:主函数错误
1: LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
[未解决外部符号_main]
代码如下:
#include
void mian(){
}
原因:将main 写错写成mian 不能正常连接处理即组建,在编译时候没有语法错误能通过,但组建就不行!
改错:只要将mian 改为main即可
2:a.cpp(6) : warning C4508: 'main' : function should return a value; 'void' return type assumed
a.cpp(11) : error C4716: 'a' : must return a value
[功能应该返回一个值, 可以返回假定的void 类型]
[必须返回一个值]
代码如下:
#include
int main(){
int a();
a();
}
int a(){
}
原因:自定义函数里没有return 语句,也就是没有返回一个确定的值,在主调函数里调用时,不清楚就干脆报错!
改错:在自定函数里面,加上return 语句即可,或者是改为void 函数类型,主函数里最好要加上return 语句,虽然编译不出错,但是有时候会出错
3:a.cpp(5) : error C2562: 'main' : 'void' function returning a value
a.cpp(2) : see declaration of 'main'
[main中:void 函数功能正返回一个值]
[看主函数的声明]
代码如下:
#include
void main(){
return 0;
}
原因:不带返回类型的函数,不需要返回一个值,带返回类型的函数是和return X;一起来用的
改错:将return 0;去掉,或是将void 改为int;
二:语法错误
4:cpp(5) : error C2065: 'b' : undeclared identifier
[错误,b 是未声明的标识符]
代码如下:
#include
void main(){
int a=4;
b=4;
}
原因:没有对b 进行声明一个数据类型,系统不认识;
改错:在b 的前面进行声明一个数据类型,如int float char等
5:syntax error : missing ';' before '}'
[语法错误:在“} “之前少了”;“号]
代码如下:
#include
void main(){
int a=3
}
原因:没有在标识符a=3的后面加分号;因为分号是程序语句结束的标志;
改错:在a=3的后面加上分号即可
6:D:\C\A\a.cpp(4) : error C2059: syntax error : ')'
D:\C\A\a.cpp(4) : error C2143: syntax error : missing ';' before '{'
[对于“)“存在语法错误]
#include
void main(){
if(){
int b=3;
}
}
原因:在()里面没有任何表达式,属于典型的语法错误
改错:在()里面加上表达式即可
7:syntax error : missing ')' before '{'
[语法错误,在“{ “的前面少了” )”]
#include
void main(){
int a=8;
if(a>8{
}
},
原因:是少了右括号,对于if ,for,while,do-while,switch,函数的语句等会出现以上错误;改错:添加“) “即可;
8:syntax error : missing ']' before ';'
[语法错误,在“;“号的前面少了”]“]
#include
void main(){
int a[5;
}
原因:少了“]“,对于一维数组,二维数组,多维数组可能会出现以上错误;
改错:在其后面加上“]“即可
9:D:\C\A\a.cpp(7) : error C2046: illegal case
D:\C\A\a.cpp(8) : error C2043: illegal break
[违法的case ,break语句]
代码如下:
#include
void main(){
int a=8;
switch(a)
case 0:
break;
case 1:
break;
}
原因:因为switch语句必须加上大括号,才是完整的结构语句,如果没有加上的话,属于违法,系统不认识;
改错:需要在switch(X)语句后面加上大括号即可
10:D:\C\A\a.cpp(5) : error C2143: syntax error : missing ':' before ';'
D:\C\A\a.cpp(7) : error C2143: syntax error : missing ':' before ';'
[语法错误,在“;“的前面少了”:“]
代码如下:
#include
void main(){
int a=8;
switch(a){
case 0;
break;
case 1;
break;
}
}
原因:在switch语句中,case后面必须是“:“,而不是分号;
改错:在每个case 语句后面换成“:“即可
11:error C2450: switch expression of type 'float' is illegal
[switch语句中的float表达式是违法的]
#include
void main(){
int a=8;
float f=23.8
switch(f){
case0:
break;
case1:
break;
}
}
原因:在switch语句中,后面的括号应该填入表达式的类型为整型:包括整数和字符型,其他类型都属于违法;
改错:在switch语句后面的括号填入整型的表达式;
12:D:\C\A\a.cpp(6) : error C2051: case expression not constant
D:\C\A\a.cpp(10) : warning C4060: switch statement contains no 'case' or 'default' labels
[选择表达式情况不明确]
[开关声明不含”case”或默认的标签]
#include
void main(){
int a=3;
switch(a){
case 3+a:
break;
}
}
原因:对于case 语句后必须是一个常量值或是常量表达式,不能是带变量的表达式,最终的值不明确。
改错:只需要在case后面的表达式改为常量或是常量值;
13: error C2440: 'initializing' : cannot convert from 'char [2]' to 'char'
[初始化错误,不能将2个字符转化为字符]
#include
void main(){
char a="a";
}
原因:不能将字符串类型赋值给单个的字符!因为他们的类型不一样,属于非法;
改错:将=”a”改为’a’;即可
14:error C2041: illegal digit '8' for base '8'
[错误C2041:不合法的数字的8 –对于八进制而言]
#include
void main(){
int a=081;
}
原因:虽然可以用二进制,八进制,十六进制赋值给int型,但八进制是用0-7进行表示的,0的后面是小于8的数字,所以是非法
改错:只要是小于8的即可前面是0表示的八进制数。
15:出现对话框,显示该内存不能为”writtrn”;
[在输入scanf函数的时候,忘记变量的地址符&]
#include
void main(){
char num;
scanf("%d",num);
}
原因:因为没有地址符,所以不能存放数据到电脑内存中,所以就会报内存错误;
改错:在变量的前面加上地址符&即可
16:虽然加了条件判读语句。但没有出所要的结果;
[虽然语法没有错误,但出现逻辑错误]
#include
void main(){
if(1>2);
printf("This is true!\n");
}
原因:在if 语句的后面加上了不该加的";"号,相当于执行了空语句!
改错:把“;”去掉即可!
17:error C2065: 'b' : undeclared identifier
[错误,b是未声明的标识符]
#include
void main(){
int a=4,B=3;
if(a>b){
printf("%d\n",b);
}
}
原因:在程序中有一个大写的B和小写的b,使用b的时候,没有进行声明,误把大写的B当做小写的b;
改错:把变量的声明和定义改成一致即可!
18:没有出现正确的结果,结果与要求不符合
[逻辑错误]
#include
void main(){
int a=1;
if(a=2)
printf("%d \n",a);
}
原因:误将a=2,当做a==2,将赋值表达式当做关系表达式,a=2当做a为非1的
数据,永远为真!当a==2返回一个逻辑值为假.
改错:将a=2,改为a==2;
19:数组的最后一个元素值是莫名奇妙的值;
[数组下标越界,访问不到元素值,返回系统默认值]
#include
void main(){
int a[5]={23,56,78,0,12};
for(int i=0;i<=5;i++){
printf("%d ",a[i]);
}
}
原因:数组的下标从0开始计算,所以最后的5是根本访问不到,系统会给一个默认值,但不可预测;
改错:将<=5改为<5即可,如果从0开始计算的话,一般是到最大长度减一
20:E:\C\A\a.cpp(3) : error C2065: 'add' : undeclared identifier
E:\C\A\a.cpp(5) : error C2373: 'add' : redefinition; different type modifiers
[错误:add未进行声明]
[错误:add 需要重新界定,他是不同的类型]
#include
void main(){
printf("%d \n",add(2,4));
}
int add(int a,int b){
return a+b;
}
原因:没有对自己定义的函数进行声明,所以系统不认识!
改错:1,把函数放在调用函数的前面进行声明,或是将函数放在主函数前面进行定义!
21:E:\C\A\a.cpp(4) : error C2660: 'add' : function does not take 1 parameters
[错误,功能函数没有只取一个参数]
#include
void main(){
int add(int a,int b);
printf("%d \n",add(2));
}
int add(int a,int b){
return a+b;
}
原因:在函数调用的时候,填入的参数与自己定义的不相同,少了一个参数;
改错:在调用的时候,要注意填入两个参数,也就是与自己定义的函数的参数类型一致,个数相同。
22:E:\C\A\a.cpp(7) : error C2065: 'add' : undeclared identifier
[未对add函数进行声明定义]
int ads(int a,int b){
return a+b;
}
#include
void main(){
printf("%d \n",add(2,3));
}
原因:在主调函数里调用了没有定义的add函数;
改错:在调用add函数之前,要进行声明定义,将ads改为add
23:E:\C\A\a.cpp(3) : error C2146: syntax error : missing ')' before identifier 'add'
E:\C\A\a.cpp(3) : error C2059: syntax error : ')'
[在标识符add前面少了“;”号]
[语法错误]
#include
void main(){
printf("%d \n"add(2,3));
}
原因:只是少了一个逗号,在add(...)前面;并不是少了逗号,要前后来看
改错:在add(...)前面加上逗号即可