C语言常见错误指令
常见c语言错误中英文对照表

1. Ambiguous operators need parentheses — 不明确的运算需要用括号括起2. Ambiguous symbol 'xxx' — 不明确的符号3. Argument list syntax error — 参数表语法错误4. Array bounds missing — 丢失数组界限符5. Array size toolarge — 数组尺寸太大6. Bad character in paramenters — 参数中有不适当的字符7. Bad file name format in include directive — 包含命令中文件名格式不正确8. Bad ifdef directive synatax — 编译预处理ifdef有语法错9. Bad undef directive syntax — 编译预处理undef有语法错10. Bit field too large — 位字段太长11. Call of non-function — 调用未定义的函数12. Call to function with no prototype — 调用函数时没有函数的说明13. Cannot modify a const object — 不允许修改常量对象14. Case outside of switch — 漏掉了case 语句15. Case syntax error — Case 语法错误16. Code has no effect — 代码不可能执行到17. Compound statement missing{ — 分程序漏掉"{"18. Conflicting type modifiers — 不明确的类型说明符19. Constant expression required — 要求常量表达式20. Constant out of range in comparison — 在比较中常量超出范围21. Conversion may lose significant digits — 转换时会丢失意义的数字22. Conversion of near pointer not allowed — 不允许转换近指针23. Could not find file 'xxx' — 找不到XXX文件24. Declaration missing ; — 说明缺少";"25. Declaration syntax error — 说明中出现语法错误26. Default outside of switch — Default 出现在switch语句之外27. Define directive needs an identifier — 定义编译预处理需要标识符28. Division by zero — 用零作除数29. Do statement must have while — Do-while语句中缺少while部分30. Enum syntax error — 枚举类型语法错误31. Enumeration constant syntax error — 枚举常数语法错误32. Error directive :xxx — 错误的编译预处理命令33. Error writing output file — 写输出文件错误34. Expression syntax error — 表达式语法错误35. Extra parameter in call — 调用时出现多余错误36. File name too long — 文件名太长37. Function call missing ) — 函数调用缺少右括号38. Fuction definition out of place — 函数定义位置错误39. Fuction should return a value — 函数必需返回一个值40. Goto statement missing label — Goto语句没有标号41. Hexadecimal or octal constant too large — 16进制或8进制常数太大42. Illegal character 'x' — 非法字符x43. Illegal initialization — 非法的初始化44. Illegal octal digit — 非法的8进制数字45. Illegal pointer subtraction — 非法的指针相减46. Illegal structure operation — 非法的结构体操作47. Illegal use of floating point — 非法的浮点运算48. Illegal use of pointer — 指针使用非法49. Improper use of a typedefsymbol — 类型定义符号使用不恰当50. In-line assembly not allowed — 不允许使用行间汇编51. Incompatible storage class — 存储类别不相容52. Incompatible type conversion — 不相容的类型转换53. Incorrect number format — 错误的数据格式54. Incorrect use of default — Default使用不当55. Invalid indirection — 无效的间接运算56. Invalid pointer addition — 指针相加无效57. Irreducible expression tree — 无法执行的表达式运算58. Lvalue required — 需要逻辑值0或非0值59. Macro argument syntax error — 宏参数语法错误60. Macro expansion too long — 宏的扩展以后太长61. Mismatched number of parameters in definition — 定义中参数个数不匹配62. Misplaced break — 此处不应出现break语句63. Misplaced continue — 此处不应出现continue语句64. Misplaced decimal point — 此处不应出现小数点65. Misplaced elif directive — 不应编译预处理elif66. Misplaced else — 此处不应出现else67. Misplaced else directive — 此处不应出现编译预处理else68. Misplaced endif directive — 此处不应出现编译预处理endif69. Must be addressable — 必须是可以编址的70. Must take address of memory location — 必须存储定位的地址71. No declaration for function 'xxx' — 没有函数xxx的说明72. No stack — 缺少堆栈73. No type information — 没有类型信息74. Non-portable pointer assignment — 不可移动的指针(地址常数)赋值75. Non-portable pointer comparison — 不可移动的指针(地址常数)比较76. Non-portable pointer conversion — 不可移动的指针(地址常数)转换77. Not a valid expression format type — 不合法的表达式格式78. Not an allowed type — 不允许使用的类型79. Numeric constant too large — 数值常太大80. Out of memory — 内存不够用81. Parameter 'xxx' is never used — 能数xxx没有用到82. Pointer required on left side of -> — 符号->的左边必须是指针83. Possible use of 'xxx' before definition — 在定义之前就使用了xxx(警告)84. Possibly incorrect assignment — 赋值可能不正确85. Redeclaration of 'xxx' — 重复定义了xxx86. Redefinition of 'xxx' is not identical — xxx的两次定义不一致87. Register allocation failure — 寄存器定址失败88. Repeat count needs an lvalue — 重复计数需要逻辑值89. Size of structure or array not known — 结构体或数给大小不确定90. Statement missing ; — 语句后缺少";"91. Structure or union syntax error — 结构体或联合体语法错误92. Structure size too large — 结构体尺寸太大93. Sub scripting missing ] — 下标缺少右方括号94. Superfluous & with function or array — 函数或数组中有多余的"&"95. Suspicious pointer conversion — 可疑的指针转换96. Symbol limit exceeded — 符号超限97. Too few parameters in call — 函数调用时的实参少于函数的参数不98. Too many default cases — Default太多(switch语句中一个)99. Too many error or warning messages — 错误或警告信息太多100. Too many type in declaration — 说明中类型太多101. Too much auto memory in function — 函数用到的局部存储太多102. Too much global data defined in file — 文件中全局数据太多103. Two consecutive dots — 两个连续的句点104. Type mismatch in parameter xxx — 参数xxx类型不匹配105. Type mismatch in redeclaration of 'xxx' — xxx重定义的类型不匹配106. Unable to create output file 'xxx' — 无法建立输出文件xxx107. Unable to open include file 'xxx' — 无法打开被包含的文件xxx 108. Unable to open input file 'xxx' — 无法打开输入文件xxx109. Undefined label 'xxx' — 没有定义的标号xxx110. Undefined structure 'xxx' — 没有定义的结构xxx111. Undefined symbol 'xxx' — 没有定义的符号xxx112. Unexpected end of file in comment started on line xxx — 从xxx行开始的注解尚未结束文件不能结束113. Unexpected end of file in conditional started on line xxx — 从xxx 开始的条件语句尚未结束文件不能结束114. Unknown assemble instruction — 未知的汇编结构115. Unknown option — 未知的操作116. Unknown preprocessor directive: 'xxx' — 不认识的预处理命令xxx117. Unreachable code — 无路可达的代码118. Unterminated string or character constant — 字符串缺少引号119. User break — 用户强行中断了程序120. Void functions may not return a value — Void类型的函数不应有返回值121. Wrong number of arguments — 调用函数的参数数目错122. 'xxx' not an argument — xxx不是参数123. 'xxx' not part of structure — xxx不是结构体的一部分124. xxx statement missing ( — xxx语句缺少左括号125. xxx statement missing ) — xxx语句缺少右括号126. xxx statement missing ; — xxx缺少分号127. xxx' declared but never used — 说明了xxx但没有使用128. xxx' is assigned a value which is never used — 给xxx赋了值但未用过。
C语言编程最常见的15个错误

C语言编程最常见的15个错误C语言是一种结构化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
以下是关于C语言编程最常见的15个错误,希望大家认真阅读!1.书写标识符时,忽略了大小写字母的区别。
main(){ int a=5;printf("%d",A); }编译程序把a和A认为是两个不同的变量名,而显示出错信息。
C认为大写字母和小写字母是两个不同的字符。
习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
main(){ float a,b;printf("%d",a%b); }%是求余运算,得到a/b的整余数。
整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
char c;c="a";在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。
C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。
如在BASIC 程序中可以写if (a=3) then …但C语言中,“=”是赋值运算符,“==”是关系运算符。
如:if (a==3) a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。
由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1b=2编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。
改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
常见c语言错误(中英对照)

Ambiguous operators need parentheses 不明确的运算需要用括号括起Ambiguous symbol ''xxx''不明确的符号Argument list syntax error参数表语法错误Array bounds missing丢失数组界限符Array size toolarge数组尺寸太大Bad character in paramenters参数中有不适当的字符Bad file name format in include directive 包含命令中文件名格式不正确Bad ifdef directive synatax编译预处理ifdef有语法错Bad undef directive syntax编译预处理undef有语法错Bit field too large位字段太长Call of non-function调用未定义的函数Call to function with no prototype调用函数时没有函数的说明Cannot modify a const object不允许修改常量对象Case outside of switch漏掉了case 语句Case syntax errorCase 语法错误Code has no effect代码不可述不可能执行到Compound statement missing{分程序漏掉"{"Conflicting type modifiers不明确的类型说明符Constant expression required要求常量表达式Constant out of range in comparison在比较中常量超出范围Conversion may lose significant digits转换时会丢失意义的数字Conversion of near pointer not allowed 不允许转换近指针Could not find file ''xxx''找不到XXX文件Declaration missing ;说明缺少";"Declaration syntax error说明中出现语法错误Default outside of switchDefault 出现在switch语句之外Define directive needs an identifier定义编译预处理需要标识符Division by zero用零作除数Do statement must have whileDo-while语句中缺少while部分Enum syntax error枚举类型语法错误Enumeration constant syntax error枚举常数语法错误Error directive :xxx错误的编译预处理命令Error writing output file写输出文件错误Expression syntax error表达式语法错误Extra parameter in call调用时出现多余错误File name too long文件名太长Function call missing )函数调用缺少右括号Fuction definition out of place函数定义位置错误Fuction should return a value函数必需返回一个值Goto statement missing labelGoto语句没有标号Hexadecimal or octal constant too large 16进制或8进制常数太大Illegal character ''x''非法字符xIllegal initialization非法的初始化Illegal octal digit非法的8进制数字Illegal pointer subtraction非法的指针相减Illegal structure operation非法的结构体操作Illegal use of floating point非法的浮点运算Illegal use of pointer指针使用非法Improper use of a typedefsymbol类型定义符号使用不恰当In-line assembly not allowed不允许使用行间汇编Incompatible storage class存储类别不相容Incompatible type conversion不相容的类型转换Incorrect number format错误的数据格式Incorrect use of defaultDefault使用不当Invalid indirection无效的间接运算Invalid pointer addition指针相加无效Irreducible expression tree无法执行的表达式运算Lvalue required需要逻辑值0或非0值Macro argument syntax error宏参数语法错误Macro expansion too long宏的扩展以后太长Mismatched number of parameters in definition 定义中参数个数不匹配Misplaced break此处不应出现break语句Misplaced continue此处不应出现continue语句Misplaced decimal point此处不应出现小数点Misplaced elif directive不应编译预处理elifMisplaced else此处不应出现elseMisplaced else directive此处不应出现编译预处理else Misplaced endif directive此处不应出现编译预处理endif Must be addressable必须是可以编址的Must take address of memory location 必须存储定位的地址No declaration for function ''xxx''没有函数xxx的说明No stack缺少堆栈No type information没有类型信息Non-portable pointer assignment不可移动的指针(地址常数)赋值Non-portable pointer comparison不可移动的指针(地址常数)比较Non-portable pointer conversion不可移动的指针(地址常数)转换Not a valid expression format type不合法的表达式格式Not an allowed type不允许使用的类型Numeric constant too large数值常太大Out of memory内存不够用Parameter ''xxx'' is never used能数xxx没有用到Pointer required on left side of ->符号->的左边必须是指针Possible use of ''xxx'' before definition 在定义之前就使用了xxx(警告)Possibly incorrect assignment赋值可能不正确Redeclaration of ''xxx''重复定义了xxxRedefinition of ''xxx'' is not identical xxx的两次定义不一致Register allocation failure寄存器定址失败Repeat count needs an lvalue重复计数需要逻辑值Size of structure or array not known结构体或数给大小不确定Statement missing ;语句后缺少";"Structure or union syntax error结构体或联合体语法错误Structure size too large结构体尺寸太大Sub scripting missing ]下标缺少右方括号Superfluous & with function or array函数或数组中有多余的"&" Suspicious pointer conversion可疑的指针转换Symbol limit exceeded符号超限Too few parameters in call函数调用时的实参少于函数的参数不Too many default casesDefault太多(switch语句中一个)Too many error or warning messages错误或警告信息太多Too many type in declaration说明中类型太多Too much auto memory in function函数用到的局部存储太多Too much global data defined in file文件中全局数据太多Two consecutive dots两个连续的句点Type mismatch in parameter xxx参数xxx类型不匹配Type mismatch in redeclaration of ''xxx'' xxx重定义的类型不匹配Unable to create output file ''xxx''无法建立输出文件xxxUnable to open include file ''xxx''无法打开被包含的文件xxxUnable to open input file ''xxx''无法打开输入文件xxxUndefined label ''xxx''没有定义的标号xxxUndefined structure ''xxx''没有定义的结构xxxUndefined symbol ''xxx''没有定义的符号xxxUnexpected end of file in comment started on line xxx 从xxx行开始的注解尚未结束文件不能结束Unexpected end of file in conditional started on line xxx 从xxx 开始的条件语句尚未结束文件不能结束Unknown assemble instruction未知的汇编结构Unknown option未知的操作Unknown preprocessor directive: ''xxx''不认识的预处理命令xxxUnreachable code无路可达的代码Unterminated string or character constant字符串缺少引号User break用户强行中断了程序Void functions may not return a valueVoid类型的函数不应有返回值Wrong number of arguments调用函数的参数数目错''xxx'' not an argumentxxx不是参数''xxx'' not part of structurexxx不是结构体的一部分xxx statement missing (xxx语句缺少左括号xxx statement missing )xxx语句缺少右括号xxx statement missing ;xxx缺少分号xxx'' declared but never used说明了xxx但没有使用xxx'' is assigned a value which is never used给xxx赋了值但未用过Zero length structure结构体的长度为零。
C语言程序设计中的常见错误和解决

C语言程序设计中的常见错误和解决在C语言程序设计中,很多初学者经常会遇到一些常见的错误。
这些错误可能是语法错误、逻辑错误或者是其他一些常见问题导致的。
本文将介绍一些经常出现的C语言程序设计错误,并提供相应的解决方法,帮助读者更好地理解和掌握C语言编程。
一、语法错误1. 括号未匹配括号未匹配是C语言中常见的语法错误之一。
在编写代码时,经常会使用到括号,如if语句、for循环等。
如果不小心忘记关闭某个括号,就会导致括号未匹配的错误。
解决方法:仔细检查代码中的括号是否匹配,并确保每个左括号都有相应的右括号。
2. 分号丢失分号丢失是C语言中另一个常见的语法错误。
在C语言中,分号用于分隔语句,如果遗漏了分号,编译器就无法识别出语句的结束。
解决方法:检查每一行语句的末尾,确保每个语句都以分号结尾。
3. 变量未声明在使用变量之前,必须先声明该变量。
如果没有先声明变量就直接使用,编译器将无法识别该变量,从而报错。
解决方法:在使用变量之前,先进行变量声明。
二、逻辑错误1. 循环控制条件错误在编写循环语句时,控制条件的错误是常见的逻辑错误。
如果循环的控制条件错误,循环可能无法正常结束或者根本无法执行。
解决方法:仔细检查循环的控制条件,确保条件符合预期,并在循环体内更新循环变量。
2. 数组越界访问在C语言中,数组的索引从0开始,通过索引访问数组元素时,如果索引超出了数组的范围,就会导致数组越界访问的错误。
解决方法:确保数组索引在正确的范围内,避免越界访问。
如果需要遍历数组,可以使用循环来控制数组的访问范围。
三、其他常见问题及解决方法1. 变量类型不匹配在赋值操作或者表达式计算时,如果不同类型的变量之间进行操作,则会导致变量类型不匹配的错误。
解决方法:确保操作的变量类型相同或者进行强制类型转换,以保证变量类型的匹配。
2. 内存泄漏在C语言中,手动分配内存的操作是常见的。
如果分配了内存空间,但在使用完毕后未及时释放,就会导致内存泄漏。
C语言编写常见错误

C51语言编写常见错误一、循环1)、在进行while,do...while循环时要对while括号里面的变量赋初值,否则可能出现的不是自己想要的结果。
2)、在写for循环语句中,特别要注意括号里面的变量要一致(例如:for(i=0;i<8;j++)。
)错误。
这个错误不好改,写程序时一定要注意这一点。
3)、在写for循环时,如果想让变量的值一次性增加不是一而是大于一,这时要注意最后变量的变化要写成表达式例如:i=i+10;不要写成i+10,这个不起作用。
4)、在写循环时,对某些变量赋初值时,注意赋初值所放的位置,是放在循环里面还是外面。
不同的地方可能得到的结果不同。
要注意二、结构体、链表1)、在创建链表时,最好对首个结点赋值,否则在编译时可能会出现错误。
(如:后面会显示屯屯屯屯屯屯?)。
三、条件语句1)、在运用if条件语句时,括号里面的等于不要写成赋值号(例如:if(a==1)不要写成if(a=1))。
也就是说在if语句的条件中不要出现赋值号。
四、函数1)、在函数进行参数传递时类型要一致,且只能是实参传递到形参,不能反过来传递。
传递的实参必须是常量(在使用的时候)。
2)、在写主函数时,定义一些变量、数组或指针时,最好在主函数的最前面就定义,否则可能会出现错误。
3)、在写输入函数scanf时,后面的变量前面要加取地址符(例如:scanf(“%d”,&a),不要省略&)。
4)、在写字符串复制函数(strcpy)时切忌写错,把strcpy写成stycpy。
5)、不能直接把字符串赋给一个变量,如果要把一个字符串赋给一个变量,需要用到字符串复制函数strcpy,这个函数包含在“string.h”头文件里面,用时需要将此头文件写在程序的开头。
Strcpy(char *a,char b ),将字符串b复制到字符串a里面,注意字符串a的长度要大于等于字符串b,返回值为字符串a。
五、运算1)、在计算两个数的成积时,不要省略乘号*,例如:s=-b/(2*a)正确;s=-b/2a 错误;2)、在进行除法运算时,要注意除法与取整的区别。
C语言常见错误

对于刚学编程,刚接触C++的新手来说,编译运行报错是最头疼的一件事,爆出一堆英文,英语差一点的又不知道什么意思,所以也不知道如何去改,在此,我给大家传一份常见错误中英文对照表及简单解释,希望可以帮到大家:fatal error C1003: error count exceeds number; stopping compilation中文对照:(编译错误)错误太多,停止编译分析:修改之前的错误,再次编译fatal error C1004: unexpected end of file found中文对照:(编译错误)文件未结束分析:一个函数或者一个结构定义缺少“}”、或者在一个函数调用或表达式中括号没有配对出现、或者注释符“/*…*/”不完整等fatal error C1083: Cannot open include file: 'xxx': No such file or directory中文对照:(编译错误)无法打开头文件xxx:没有这个文件或路径分析:头文件不存在、或者头文件拼写错误、或者文件为只读fatal error C1903: unable to recover from previous error(s); stopping compilation中文对照:(编译错误)无法从之前的错误中恢复,停止编译分析:引起错误的原因很多,建议先修改之前的错误error C2001: newline in constant中文对照:(编译错误)常量中创建新行分析:字符串常量多行书写error C2006: #include expected a filename, found 'identifier'中文对照:(编译错误)#include命令中需要文件名分析:一般是头文件未用一对双引号或尖括号括起来,例如“#include stdio.h”error C2007: #define syntax中文对照:(编译错误)#define语法错误分析:例如“#define”后缺少宏名,例如“#define”error C2008: 'xxx' : unexpected in macro definition中文对照:(编译错误)宏定义时出现了意外的xxx分析:宏定义时宏名与替换串之间应有空格,例如“#define TRUE"1"”error C2009: reuse of macro formal 'identifier'中文对照:(编译错误)带参宏的形式参数重复使用分析:宏定义如有参数不能重名,例如“#define s(a,a) (a*a)”中参数a重复error C2010: 'character' : unexpected in macro formal parameter list中文对照:(编译错误)带参宏的形式参数表中出现未知字符分析:例如“#define s(r|) r*r”中参数多了一个字符‘|’error C2014: preprocessor command must start as first nonwhite space中文对照:(编译错误)预处理命令前面只允许空格分析:每一条预处理命令都应独占一行,不应出现其他非空格字符error C2015: too many characters in constant中文对照:(编译错误)常量中包含多个字符分析:字符型常量的单引号中只能有一个字符,或是以“\”开始的一个转义字符,例如“char error = 'error';”error C2017: illegal escape sequence中文对照:(编译错误)转义字符非法分析:一般是转义字符位于' ' 或" " 之外,例如“char error = ' '\n;”error C2018: unknown character '0xhh'中文对照:(编译错误)未知的字符0xhh分析:一般是输入了中文标点符号,例如“char error = 'E';”中“;”为中文标点符号error C2019: expected preprocessor directive, found 'character'中文对照:(编译错误)期待预处理命令,但有无效字符分析:一般是预处理命令的#号后误输入其他无效字符,例如“#!define TRUE 1”error C2021: expected exponent value, not 'character'中文对照:(编译错误)期待指数值,不能是字符分析:一般是浮点数的指数表示形式有误,例如123.456Eerror C2039: 'identifier1' : is not a member of 'identifier2'中文对照:(编译错误)标识符1不是标识符2的成员分析:程序错误地调用或引用结构体、共用体、类的成员error C2041: illegal digit 'x' for base 'n'中文对照:(编译错误)对于n进制来说数字x非法分析:一般是八进制或十六进制数表示错误,例如“int i = 081;”语句中数字‘8’不是八进制的基数error C2048: more than one default中文对照:(编译错误)default语句多于一个分析:switch语句中只能有一个default,删去多余的defaulterror C2050: switch expression not integral中文对照:(编译错误)switch表达式不是整型的分析:switch表达式必须是整型(或字符型),例如“switch ("a")”中表达式为字符串,这是非法的error C2051: case expression not constant中文对照:(编译错误)case表达式不是常量分析:case表达式应为常量表达式,例如“case "a"”中“"a"”为字符串,这是非法的error C2052: 'type' : illegal type for case expression中文对照:(编译错误)case表达式类型非法分析:case表达式必须是一个整型常量(包括字符型)error C2057: expected constant expression中文对照:(编译错误)期待常量表达式分析:一般是定义数组时数组长度为变量,例如“int n=10; int a[n];”中n为变量,这是非法的error C2058: constant expression is not integral中文对照:(编译错误)常量表达式不是整数分析:一般是定义数组时数组长度不是整型常量error C2059: syntax error : 'xxx'中文对照:(编译错误)‘xxx’语法错误分析:引起错误的原因很多,可能多加或少加了符号xxxerror C2064: term does not evaluate to a function中文对照:(编译错误)无法识别函数语言分析:1、函数参数有误,表达式可能不正确,例如“sqrt(s(s-a)(s-b)(s-c));”中表达式不正确2、变量与函数重名或该标识符不是函数,例如“int i,j; j=i();”中i不是函数error C2065: 'xxx' : undeclared identifier中文对照:(编译错误)未定义的标识符xxx分析:1、如果xxx为cout、cin、scanf、printf、sqrt等,则程序中包含头文件有误2、未定义变量、数组、函数原型等,注意拼写错误或区分大小写。
C语言编译、运行时常见错误

Turbo C编译、连接和运行时的常见错误&C语言编程风格一、编译时的常见错误1. 数据类型错误。
此类错误是初学者编程时的常见现象, 下面是一些要引起注意的错误:(1) 所有变量和常量必须要加以说明。
(2) 变量只能赋给相同类型的数据。
(3) 对scanf()语句, 用户可能输入错误类型的数据项, 这将导致运行时出错, 并报出错信息。
为避免这样的错误出现, 你就提示用户输入正确类型的数据。
(4) 在执行算术运算时要注意:a. 根据语法规则书写双精度数字。
要写0.5, 而不是写.5; 要写1.0,而不是1。
尽管C语言会自动地把整型转换成双精度型, 但书写双精度型是个好习惯。
让C语言为你做强行转换这是一种效率不高的程序设计风格。
这有可能导致转换产生错误。
b. 不要用0除。
这是一个灾难性的错误, 它会导致程序失败, 不管C语言的什么版本, 都是如此, 执行除法运算要特别小心。
c. 确保所有的双精度数(包括那些程序输入用的双精度数) 是在实数范围之内。
d. 所有整数必须在整数允许的范围内。
这适用于所有计算结果, 包括中间结果。
2. 将函数后面的";"忘掉。
此时错误提示色棒将停在该语句下的一行, 并显示:Statement missing ; in function <函数名>3. 给宏指令如#include, #define等语句尾加了";"号。
4. "{"和"}"、"("和")"、"/*"和"*/"不匹配。
引时色棒将位于错误所在的行, 并提示出有关丢掉括号的信息。
5. 没有用#include指令说明头文件, 错误信息提示有关该函数所使用的参数未定义。
6. 使用了Turbo C保留关键字作为标识符, 此时将提示定义了太多数据类型。
C语言常见错误分析

C语⾔常见错误分析C语⾔常见错误分析:错误分类:语法错、逻辑错、运⾏错。
0.忘记定义变量:main(){x=3;y=6;printf(“%d\n”,x+y);1.C语⾔的变量⼀定要先定义才能使⽤;2.输⼊输出的数据的类型与所⽤格式说明符不⼀致int a=3;float b=4.5;printf(“%f%d\n”,a,b);它们并不是按照赋值的规则进⾏转换(如把4.5转换为4),⽽是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出) 3.未注意int型数据的数值范围int型数据的数值范围(-32768~32768)int num=89101;printf(“%d”,num);会将超过低16位的数截去从⽽得到23563注意:定义了long型,⽽在输出时仍⽤”%d”说明符,仍会出现以上错误4.输⼊变量时忘记使⽤地址符scanf(“%d%d”,a,b);5.输⼊时数据的组织与要求不符对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输⼊6.误把”=“作为”等于”⽐较符“=“为附值运算符“==“为⽐较运算符7.语句后⾯漏分号{t=a;a=b;b=t}它是pascal的语法8.不该加分号的地⽅加了分号if(a>b);printf(“a is larger than b\n”);for(i=0;i<10;i++);scanf(“%d”,&x);printf(“%d\n”,x*x);}9.对应该有花括弧的复合语句,忘记加花括弧sum=0;i=1;while(i<=100)sum=sum+1;i++;10.括弧不配对while((c=getchar()!=‘#’)putchar(c);11.在⽤标识时,忘记了⼤写字母和⼩写字母的区别{int a,b,c;a=2;b=3;C=A+B;printf(“%d+%d=%D”,A,B,C);}12.引⽤数组元素时误⽤发圆括弧{int i,a(10);for(i=0;i<10;i++)scanf(“%d”,&a(i));}13.在定义数组时,将定义的”元素个数”误认为是”可使⽤的最⼤下标值{ int a[10]={1,2,3,4,5,6,7,8,9,10};int i;for(i=1;i<=10;i++)printf(“%d”,a[i]);}14.对⼆维或多维数组的定义和引⽤的⽅法不对{int a[5,4];printf(“%d”,a[1+2,2+2]);…}15.误以为数组名代表数组中全部元素{int a[4]={1,2,3,4};printf(“%d%d%d%d”,a);}16.混淆字符数组与字符指针的区别main(){char str[40];str=“Computer and c”;printf(“%s\n”,str);}17.在引⽤指针变量之前没有对它赋予确定的值{ char *p;scanf(“%s”,p);}{char *p,c[20];p=c;scanf(“%s”,p);}18.switch语句的各分⽀中漏写 break语句混淆字符和字符串的表⽰形式…char sex;sex=“M”;…19.使⽤⾃加(++)和⾃减(--)运算符时出的错误{int *p,a[5]={1,3,5,7,9};p=a;printf(“%d”,*p++);注意于*(++p)的区别;20.所调⽤的函数在调⽤语句之后才定义,⽽⼜在调⽤前未加说明main() {float x,y,z;x=3.5;y=-7.6;z=max(x,y);printf(“%f”,z);}float max(float x,float y){return (x>y?x:y);}21.误认为形参值的改变会影响实参的值swap(int x,int y){int t;t=x;x=y;y=t;}main(){int a,b;a=3;b=4;swap(a,b);printf(“%d,%d\n”,a,b);}22.函数的实参和形参类型不⼀致fun(float x,float y)main(){int a=3,b=4;c=fun(a,b);…}23.不同类的型指针混⽤{int i=3,*p1;float a=1.5,*p2;p1=&i;p2=&a;printf(“%d,%d\n”,*p1,*p2);}24.没有注意函数参数的求值顺序int i=3;prinft(“%d,%d,%d\n”,i,++i,++i);结果为5,5,4因为VC++是采取⾃右⾄左的顺序求函数的值C标准没有具体规定函数参数求值的顺序25.混淆数组名与指针变量的区别{ int i,a[5];for(i=0;i<5;i++)scanf(“%d”,a++);}{int a[5],*p;p=a;for(int i=0;i<5;i++)scanf(“%d”,p++)}{int a[5],*p;for(p=a;pscanf(“%d”,p);}26.混淆结构体类型与结构体变量的区别struct worker{long int num;char name[20];char sex;int age;};worker.num=187045;strcpy(/doc/449e33ccda38376baf1faefa.html ,”ZhangFun”);worker.sex=‘M’;worker.age=18;27.使⽤⽂件时忘记打开,⽤只读⽅式打开,却企图向该⽂件输出数据if(fp=fopen(“test”,”r”))==NULL){printf(“cannot open this file\n”);exit(0);ch=fgetc(fp);while(ch!=‘#’){ch=ch+4;fputc(ch,fp);ch=fgetc(fp);}C语⾔编程常见问题分析1.2.1 参数校验问题在C语⾔的函数中,⼀般都要对函数的参数进⾏校验,但是有些情况下不在函数内进⾏校验,⽽由调⽤者在外部校验,到底什么情况下应该在函数内进⾏校验,什么情况下不需要在函数内进⾏校验呢?下列原则可供读者参考。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
•
case表达式类型非法
• 分析:case表达式必须是一个整型常量(包括字符型) error C2057: expected constant expression
期待常量表达式
分析:一般是定义数组时数组长度为变量,例如“int n=10; int a*n+;”中n为变量, 是非法的 error C2058: constant expression is not integral
期待预处理命令,但有无效字符
分析:一般是预处理命令的#号后误输入其他无效字符,例如 “#!define TRUE 1” • error C2021: expected exponent value, not 'character'
期待指数值,不能是字符
分析:一般是浮点数的指数表示形式有误,例如123.456E • error C2039: 'identifier1' : is not a member of 'idenifier2'
• error C2010: 'racter' : unexpected in macro formal parameter list 带参宏的参数表表现未知字符 分析:例如“#define s(r|) r*r”中参数多了一个字符‘|’ • error C2014: preprocessor command must start as first nonwhite spa ce • 预处理命令前面只允许空格 • 每一条预处理命令都应独占一行,不应出现其他非空格字符 • error C2015: too many characters in constant • 常量中包含多个字符 • 分析:字符型常量的单引号中只能有一个字符,或是以 “\”开始 的一个转义字符 • error C2017: illegal escape sequence • 转义字符非法 • 分析:一般是转义字符位于 ' ' 或 " " 之外,例如“char
• error = ' '\n;” error C2018: unknown character '0xhh'
未知的字符0xhh
分析:一般是输入了中文标点符号,例如“char error = ‘E’;”中 “;”为中文标点符号 • error C2019: expected preprocessor directive, found 'character'
•
• • •
• •
error C2144: syntax error : missing ')' before type 'xxx‘ 在xxx类型前缺少‘)’ 分析:一般是函数调用时定义了实参的类型 error C2181: illegal else without matching if 非法的没有与if相匹配的else 分析:可能多加了“;”或复合语句没有使用“,-” error C2196: case value '0' already used : Case值0已使用 分析:case后常量表达式的值不能重复出现 error C2296: '%' : illegal, left operand has type 'float' error C2297: '%' : illegal, right operand has type 'float' %运算的左(右)操作数类型为float,这是非法的 分析:求余运算的对象必须均为int类型,应正确定义变量类型或使用强制类 型转换 error C2371: ‘xxx’ : redefinition; different basic types 标识符xxx重定义;基类型不同 分析:定义变量、数组等时重名 error C2440: '=' : cannot convert from 'char [2]' to 'char‘ 赋值运算, 无法从字符数组转换为字符 分析:不能用字符串或字符数组对字符型数据赋值,更一般的情况,类型无 法转换
标识符1不是标识符的成员
分析:程序错误地调用或引用结构体、共用体、类的成员 • error C2048: more than one default
default语句多于一个
分析:switch语句中只能有一个default,删去多余的default
•
error C2050: switch expression not integral
• •
•
•
•
• • •
error C2110: cannot add two pointers : 两个指针量不能相加 分析:例如“int *pa,*pb,*a; a = pa + pb;”中两个指针变量不能进行“+”运算 error C2117: 'xxx' : array bounds overflow : 数组xxx边界溢出 分析:一般是字符数组初始化时字符串长度大于字符数组长度,例如 “char str[4] = "abcd“;” error C2118: negative subscript or subscript is too large : 下标为负或下标太大 分析:一般是定义数组或引用数组元素时下标不正确 error C2124: divide or mod by zero 被零除或对0求余 分析:例如“int i = 1 / 0;”除数为0 error C2133: 'xxx' : unknown size 数组xxx长度未知 分析:一般是定义数组时未初始化也未指定数组长度,例如“int a*+;” error C2137: empty character constant 字符型常量为空 分析:一对单引号“‘’”中不能没有任何字符 error C2143: syntax error : missing 'token1' before 'token2' error C2146: syntax error : missing 'token1' before identifier 'identifier' 在标识符或语言符号2前漏写语言符号1 分析:可能缺少“,”、“)”或“;”等语言符号
• error C2006: #include expected a filename, found 'identifier' #include命令中需要文件名 分析:一般是头文件未用一对双引号或尖括号括起来,例如 “#include stdio.h” • error C2007: #define syntax #define语法错误 分析:例如“#define”后缺少宏名,例如“#define N 100” • error C2008: 'xxx' : unexpected in macro definition 宏定义时出现了意外的xxx 分析:宏定义时宏名与替换串之间应有空格,例如 “#define TRUE"1"” • error C2009: reuse of macro formal 'identifier' 带参宏的形式参数重复使用 分析:宏定义如有参数不能重名,例如“#define s(a,a) (a*a)”中参 数a重复
•
常量表达式不是整数
分析:一般是定义数组时数组长度不是整型常量
•
•
•
•
•
error C2059: syntax error : 'xxx‘ ‘xxx’语法错误 分析:引起错误的原因很多,可能多加或少加了符号xxx error C2064: term does not evaluate to a function 无法识别函数语言 分析:1、函数参数有误,表达式可能不正确,例如“sqrt(s(s-a)(s-b)(s-c));”中表 达式不正确 2、变量与函数重名或该标识符不是函数,例如“int i,j; j=i();”中i不是函数 error C2065: 'xxx' : undeclared identifier 未定义的标识符xxx 分析:1、如果xxx为cout、cin、scanf、printf、sqrt等,则程序中包含头文件有 误 2、未定义变量、数组、函数原型等,注意拼写错误或区分大小写。 error C2078: too many initializes 初始值过多 分析:一般是数组初始化时初始值的个数大于数组长度,例如 int b*2+=,1,2,3-;” error C2082: redefinition of formal parameter 'xxx‘ 重复定义形式参数xxx 分析:函数首部中的形式参数不能在函数体中再次被定义
•
•
•
•
•
error C2447: missing function header (old-style formal list?) error C2448: '<Unknown>' : functionstyle initializer appears to be a function definition 缺少函数标题(是否是老式的形式表?) 分析:函数定义不正确,函数首部的“( )”后多了分号或者采用了老式的C语言 的形参表 error C2450: switch expression of type 'xxx' is illegal switch表达式为非法的xxx类型 分析:switch表达式类型应为int或char error C2466: cannot allocate an array of constant size 0 : 不能分配长度为0的数组 分析:一般是定义数组时数组长度为0 error C2601: 'xxx' : local function definitions are illegal : 函数xxx定义非法 分析:一般是在一个函数的函数体中定义另一个函数 error C2632: 'type1' followed by 'type2' is illegal : 类型1后紧接着类型2,这是非法的 分析:例如“int float I;”语句