搜档网
当前位置:搜档网 › C语言常见出错专题总结

C语言常见出错专题总结

C语言常见出错专题总结
C语言常见出错专题总结

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(...)前面加上逗号即可

相关主题