c语言常见编译错误及分析(代码片段)

行稳方能走远 行稳方能走远     2023-01-05     782

关键词:

目录

绪论

首先我们来分类一下几种常见错误

  1. 逻辑错误
  2. 语法错误
  3. 链接错误
  4. 编译错误
  5. 安装错误

第一安装错误:


[1]Error spawning cl.exe

[2]fatal error C1083: Cannot open include file:


以上两种错误情况是一样的,头文件没有放到安装目录下,都是你在安装的时候路径选择错了,怎么解决呢?重新安装??这不能解决问题的!!!
解决方案:


我们首先点击可执行文件,然后在路径区将前四个路径分别做如下修改,和我下边的地址设置成一样!!如果你的前四个文件路径和我下边的不一样,那你就双击一下,修改地址即可。

双击之后点击那三个点就可以选择文件路径了!!

接下来目录选择头文件include区域!和上一步操作一样,把路径地址换成我下面的路径,记住如果这两你多余四行,那你就删除,删到只剩三行即可。

接下来选择目录如下,同时修改前两行地址,和下边的地址要一样,多余行数删除处理!

最后一步,选择另外一个目录,换掉前三行地址,和如下地址要一样!!

做完如上操作之后点击确定在进行编译,问题就解决了,如果没有解决那就是你的某个目录下的文件没有按照我的地址来配对,再检查一下就行了!

第二打开编译器失败,提示不能打开


这个问题的其实很简单的。解决方案:

  1. 点击进入---->下载该解压器
  2. 安装好之后,观察压缩包变成360zip之后就可以直接打开了!

第三cannot execute program解决方案


问题导致原因:
你添加的工程名字和文件名字不一致

解决方案:
首先建好项目名字,在建你的C++source时,记得名字一定要一样!!!还有不能用中文名字!!

第四连接Link.exe错误解决方案

错误原因:
一个项目建了多个工程文件,且名字不对应,与第三错误类似


解决方案:重新新建一个项目,再建一个工程文件,记得名字要一样!!

第五 error C2143: syntax error : missing ‘)’ before 'return’解决方案

当发现这个语句的时候发现只要我们对应去找提示错误的语句就可以了,把失去的分号去掉就可以了!!!


可是我们发现,提示的语句是有分号的!!!

这个时候我们要去该语句的上一句或是下一句去寻找分号是否有缺失,双引号也是我们排查的目标!!!

我们发现其实上一个语句缺了分号

这个错误是很多人都容易忽略的,也是不容易看出来的,但一定要有这个思路!!

第六涉及scanf输出结果为空的错误解决方案

我们在输入一个值后输出缺为空!!

排查错误步骤:

  1. 输入语句格式【忘了地址符&】
  2. 输出语句格式【忘了逗号】
  3. 变量定义数据类型【数据类型不匹配】

    加上地址符&之后就OK了

第七

error C2065: ‘a’ : undeclared identifier

error C2109: subscript requires array or pointer type

error C2102: ‘&’ requires l-value



分析:凡是发现连带错误的时候,都要自顶向下的检查拍错!看代码的时候也是自顶向下进行排查!
错误解决方案:
把for循环后边的分号去掉!!

你只要记住,也就是循环,选择结构的都不要再后边加分号。forif不要再后边加分号。

第八

error C2018: unknown character ‘0xa3’

error C2018: unknown character ‘0xac’

我相信这个错误大家已经见得司空见惯了吧!!!是不是一脸懵逼???
解决方案:
检查标点符号!检查标点符号!检查标点符号!

注意你的标点符号,有一个地方的标点用成了中文!!!
发现句子外边的分号正常那就看中间句子的空格间隙是不是特别大,如果大,那就说明符号有问题!!

第九

fatal error C1083: Cannot open include file: ‘stduio.h’: No such file or directory

这个是不是特别眼熟??
解决方案
观察头文件,你的头文件拼错了!!!
你们顺手就喜欢打一个u在上面,正确头文件:<stdio.h>


文字说明

cannot open Debug/lalal.exe for writng executing link.exe.


解决方案:

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.456E

error 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,删去多余的default

error 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’语法错误
分析:引起错误的原因很多,可能多加或少加了符号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 initializers

中文对照:(编译错误)初始值过多
分析:一般是数组初始化时初始值的个数大于数组长度,例如“int b[2]=1,2,3;”

error C2082: redefinition of formal parameter ‘xxx’

中文对照:(编译错误)重复定义形式参数xxx
分析:函数首部中的形式参数不能在函数体中再次被定义

error C2084: function ‘xxx’ already has a body

中文对照:(编译错误)已定义函数xxx
分析:在VC++早期版本中函数不能重名,6.0版本中支持函数的重载,函数名可以相同但参数不一样

error C2086: ‘xxx’ : redefinition

中文对照:(编译错误)标识符xxx重定义
分析:变量名、数组名重名

error C2087: ‘’ : missing subscript

中文对照:(编译错误)下标未知
分析:一般是定义二维数组时未指定第二维的长度,例如“int a[3][];”

error C2100: illegal indirection

中文对照:(编译错误)非法的间接访问运算符“
分析:对非指针变量使用“
”运算

error C2105: ‘operator’ needs l-value

中文对照:(编译错误)操作符需要左值
分析:例如“(a+b)++;”语句,“++”运算符无效

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’

中文对照:(编译错误)赋值运算,无法从字符数组转换为字符
分析:不能用字符串或字符数组对字符型数据赋值,更一般的情况,类型无法转换

error C2447: missing function header (old-style formal list?) error C2448: ‘’ : function-style 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;”语句

error C2660: ‘xxx’ : function does not take n parameters

中文对照:(编译错误)函数xxx不能带n个参数
分析:调用函数时实参个数不对,例如“sin(x,y);”

error C2664: ‘xxx’ : cannot convert parameter n from ‘type1’ to ‘type2’

中文对照:(编译错误)函数xxx不能将第n个参数从类型1转换为类型2
分析:一般是函数调用时实参与形参类型不一致

error C2676: binary ‘<<’ : ‘class istream_withassign’ does not define this operator or a conversion to a type acceptable to the predefined operator error C2676: binary ‘>>’ : ‘class ostream_withassign’ does not define this operator or a conversion to a type acceptable to the predefined operator

分析:“>>”、“<<”运算符使用错误,例如“cin<

C语言常见编译错误及分析

转载自编程论坛-“自学的数学"的帖子

1、fatal error C1003: error count exceeds number; stopping compilation

中文对照:(编译错误)错误太多,停止编译
分析:修改之前的错误,再次编译

2、fatal error C1004: unexpected end of file found

中文对照:(编译错误)文件未结束
分析:一个函数或者一个结构定义缺少“”、或者在一个函数调用或表达式中括号没有配对出现、或者注释符“//”不完整等

3、fatal error C1083: Cannot open include file: ‘xxx’: No such file or directory

中文对照:(编译错误)无法打开头文件xxx:没有这个文件或路径
分析:头文件不存在、或者头文件拼写错误、或者文件为只读

4、fatal error C1903: unable to recover from previous error(s); stopping compilation

中文对照:(编译错误)无法从之前的错误中恢复,停止编译
分析:引起错误的原因很多,建议先修改之前的错误

5、error C2001: newline in constant

中文对照:(编译错误)常量中创建新行
分析:字符串常量多行书写

6、error C2006: #include expected a filename, found ‘identifier’

中文对照:(编译错误)#include命令中需要文件名
分析:一般是头文件未用一对双引号或尖括号括起来,例如“#include stdio.h”

7、error C2007: #define syntax

中文对照:(编译错误)#define语法错误
分析:例如“#define”后缺少宏名,例如“#define”

8、error C2008: ‘xxx’ : unexpected in macro definition

中文对照:(编译错误)宏定义时出现了意外的xxx
分析:宏定义时宏名与替换串之间应有空格,例如“#define TRUE"1"”

9、error C2009: reuse of macro formal ‘identifier’

中文对照:(编译错误)带参宏的形式参数重复使用
分析:宏定义如有参数不能重名,例如“#define s(a,a) (a*a)”中参数a重复

10、error C2010: ‘character’ : unexpected in macro formal parameter list

中文对照:(编译错误)带参宏的形式参数表中出现未知字符
分析:例如“#define s(r|) r*r”中参数多了一个字符‘|’

11、error C2014: preprocessor command must start as first nonwhite space

中文对照:(编译错误)预处理命令前面只允许空格
分析:每一条预处理命令都应独占一行,不应出现其他非空格字符

12、error C2015: too many characters in constant

中文对照:(编译错误)常量中包含多个字符
分析:字符型常量的单引号中只能有一个字符,或是以“\\”开始的一个转义字符,例如“char error = ‘error’;”

13、error C2017: illegal escape sequence

中文对照:(编译错误)转义字符非法
分析:一般是转义字符位于 ’ ’ 或 " " 之外,例如“char error = ’ '\\n;”

14、error C2018: unknown character ‘0xhh’

中文对照:(编译错误)未知的字符0xhh
分析:一般是输入了中文标点符号,例如“char error = ‘E’;”中“;”为中文标点符号

15、error C2019: expected preprocessor directive, found ‘character’

中文对照:(编译错误)期待预处理命令,但有无效字符
分析:一般是预处理命令的#号后误输入其他无效字符,例如“#!define TRUE 1”

16、error C2021: expected exponent value, not ‘character’

中文对照:(编译错误)期待指数值,不能是字符
分析:一般是浮点数的指数表示形式有误,例如123.456E

17、error C2039: ‘identifier1’ : is not a member of ‘identifier2’

中文对照:(编译错误)标识符1不是标识符2的成员
分析:程序错误地调用或引用结构体、共用体、类的成员

18、error C2041: illegal digit ‘x’ for base ‘n’

中文对照:(编译错误)对于n进制来说数字x非法
分析:一般是八进制或十六进制数表示错误,例如“int i = 081;”语句中数字‘8’不是八进制的基数

19、error C2048: more than one default

中文对照:(编译错误)default语句多于一个
分析:switch语句中只能有一个default,删去多余的default

20、error C2050: switch expression not integral

中文对照:(编译错误)switch表达式不是整型的
分析:switch表达式必须是整型(或字符型),例如“switch (“a”)”中表达式为字符串,这是非法的

21、error C2051: case expression not constant

中文对照:(编译错误)case表达式不是常量
分析:case表达式应为常量表达式,例如“case “a””中““a””为字符串,这是非法的

22、error C2052: ‘type’ : illegal type for case expression

中文对照:(编译错误)case表达式类型非法
分析:case表达式必须是一个整型常量(包括字符型)

23、error C2057: expected constant expression

中文对照:(编译错误)期待常量表达式
分析:一般是定义数组时数组长度为变量,例如“int n=10; int a[n];”中n为变量,这是非法的

24、error C2058: constant expression is not integral

中文对照:(编译错误)常量表达式不是整数
分析:一般是定义数组时数组长度不是整型常量

25、error C2059: syntax error : ‘xxx’

中文对照:(编译错误)‘xxx’语法错误
分析:引起错误的原因很多,可能多加或少加了符号xxx

26、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不是函数

27、error C2065: ‘xxx’ : undeclared identifier

中文对照:(编译错误)未定义的标识符xxx
分析:1、如果xxx为cout、cin、scanf、printf、sqrt等,则程序中包含头文件有误 2、未定义变量、数组、函数原型等,注意拼写错误或区分大小写。

28、error C2078: too many initializers

中文对照:(编译错误)初始值过多
分析:一般是数组初始化时初始值的个数大于数组长度,例如“int b[2]=1,2,3;”

29、error C2082: redefinition of formal parameter ‘xxx’

中文对照:(编译错误)重复定义形式参数xxx
分析:函数首部中的形式参数不能在函数体中再次被定义

30、error C2084: function ‘xxx’ already has a body

中文对照:(编译错误)已定义函数xxx
分析:在VC++早期版本中函数不能重名,6.0版本中支持函数的重载,函数名可以相同但参数不一样

31、error C2086: ‘xxx’ : redefinition

中文对照:(编译

我的c/c++语言学习进阶之旅c++编程常出现错误:undefinedreference的一些常见情况分析(代码片段)

程序员在C++开发过程中经常遇到严重错误,如:UndefinedreferenceSegmentationfault(coredumped)Unresolvedexternalsymbol我们将讨论我们在C++中经常遇到的最重要的错误确实至关重要。除了不时发生的系统以及语义错误和异常... 查看详情

c语言常见错误

对于刚学编程,刚接触C++的新手来说,编译运行报错是最头疼的一件事,爆出一堆英文,英语差一点的又不知道什么意思,所以也不知道如何去改,在此,我给大家传一份常见错误中英文对照表... 查看详情

faq接入hmscore推送服务,服务端下发消息常见错误码原因分析及解决方法(代码片段)

...下行消息给终端设备。这篇文章汇总了服务端下发消息最常见的6个错误码,并提供了原因分析和解决方法,有遇到类似问题的开发者们快了解一下吧。错误码一:80200001,"Oauth认证错误"原因分析:下发... 查看详情

c语言编程中的5个常见错误及对应解决方案(代码片段)

导读:增强C语言程序的弹性和可靠性的五种方法。                   本文字数:8391,阅读时长大约:10分钟https://linux.cn/article-13894-1.html作者:JimHall译者:unigeorge即使是最好的程序... 查看详情

2110-微服务核心知识点及问题分析(代码片段)

文章目录Day01~微服务架构入门核心知识点常见问题分析常见Bug分析课堂练习课后作业Day02~Nacos注册中心入门核心知识点常见问题分析常见Bug分析课后作业Day03~远程服务调用实践核心知识点常见问题分析常见Bug分析课后作业Day04~Naco... 查看详情

为啥编译时出现cannotfindlz错误,怎么解决

...  编译  编译(compilation,compile)1、利用编译程序从源语言编写的源程序产生目标程序的过程。2、用编译程序产生目标程序的动作。编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟... 查看详情

gnu调试反编译二进制分析工具链(代码片段)

...、示例程序源代码及编译首先给出的是用于后续演示的C语言示例程序demo_code01.c:#include<stdio.h>#include"myhead.h"intfoo1(inty)intflag=10,new_value=13;intrevers 查看详情

12-2107课上问题分析及总结(代码片段)

文章目录Day01~微服务架构入门核心知识点常见问题分析常见Bug分析课后作业作业答案Day02~Nacos注册中心入门核心知识点常见问题分析常见Bug分析课后作业Day03~服务发现及调用核心知识点常见问题分析常见Bug分析课后作业Day01~微服... 查看详情

常见的编译分析有函数调用树(代码片段)

常见的编译分析有函数调用树(calltree),控制流程图(Controlflowgraph),以及在此基础上的变量定义使用。定义链(define-use/use-defineoru-d/d-uchain)变量别名分析(aliasanalysis)指针分析(pointeranalysis)数据依赖分析(datadependenceanal... 查看详情

编译原理实验一java语言实现对c语言词法分析(代码片段)

实验一 C语言词法分析器 (预习报告) 一、实验目的  1.理解词法分析在编译程序中的作用;  2.掌握词法分析程序的实现方法和技术二、实验原理  输入源程序,扫描分解字符串,通过状态转换图,识别... 查看详情

c语言----程序编译(预处理)(代码片段)

...宏的替换去除注释2)编译gcctest.i-S生成test.s的文件把C语言代码转化为汇编代码编译部分深入学习编译原理语法分析词法分析语义分析符号汇总1).把c程序所有的全局符号汇总(add.c中的全局符号是Ad 查看详情

c语言学习--visualstudio基本调试方法(代码片段)

文章目录调试的基本步骤Debug和Releaserelease对代码的优化Windows环境调试调试环境准备断点调试设置断点开始调试条件断点逐过程调试逐语句调试跳出函数快速运行到光标处监视窗口调用监视窗口设置监视项自动窗口局部变量窗口... 查看详情

编译原理sysy语言的词法分析程序(代码片段)

实验目的与内容对SysY语言进行词法分析,可以查出语言中可能包含的词法错误。从控制台输入字符串,如有出错则输出错误,没有错误则按照二元组的方式输出设计方法对SysY语法进行分析如下:(1)保留字:ife... 查看详情

gcc编译流程及常用编辑命令(代码片段)

GCC编译器在编译一个C语言程序时需要经过以下4步:将C语言源程序预处理,生成.i文件。预处理后的.i文件编译成为汇编语言,生成.s文件。将汇编语言文件经过汇编,生成目标文件.o文件。将各个模块的.o文件链接起来生成一个... 查看详情

c语言之函数调用及栈帧分析(代码片段)

一.前言 每一次函数调用都是一个过程。这个过程我们通常称之为:函数的调用过程。这个过程要为函数开辟栈空间,用于本次函数的调用中临时变量的保存,现场保护。这块栈空间就是函数栈帧。实验代码:#inc... 查看详情

性能测试常见瓶颈分析及调优方法(代码片段)

...。而引发性能瓶颈的原因是多种多样的,在之前的博客:常见的性能测试缺陷有进行介绍。这篇博客,来聊聊性能测试过程中的一些注意事项,以及常见的一些性能缺陷表现及如何进行定位分析并且调优。。。 一、注意事项... 查看详情

程序语言的常见设计错误-试图容纳世界(代码片段)

之前的一篇文章里,我谈到了程序语言设计的一个常见错误倾向:片面追求短小,它导致了一系列的历史性的设计错误。今天我来谈一下另外一种错误的倾向,这种倾向也导致了很多错误,并且继续在导致错误的产生。今天我要... 查看详情

常见python面试题(代码片段)

1,简述列举了解的编程语言及语言间的区别?Python解释型语言,代码简洁,易懂C语言编译型语言,底层语言c++编译型语言,在C语言基础上加了面向对象Java混合型语言,可拓展性高Golang编译型语言,强类型,代码规范,高并发语... 查看详情