常见gcc 编译错误整理

合集下载

GCC常见错误解析

GCC常见错误解析

GCC常见错误解析一、错误类型第一类∶C语法错误错误信息∶文件source.c中第n行有语法错误(syntex errror)。

这种类型的错误,一般都是C语言的语法错误,应该仔细检查源代码文件中第n行及该行之前的程序,有时也需要对该文件所包含的头文件进行检查。

有些情况下,一个很简单的语法错误,gcc会给出一大堆错误,此时要保持清醒的头脑,不要被其吓倒,必要的时候再参考一下C语言的基本教材。

第二类∶头文件错误错误信息∶找不到头文件head.h(Can not find include file head.h)。

这类错误是源代码文件中的包含头文件有问题,可能的原因有头文件名错误、指定的头文件所在目录名错误等,也可能是错误地使用了双引号和尖括号。

第三类∶档案库错误错误信息∶连接程序找不到所需的函数库,例如∶ld: -lm: No such file or directory.这类错误是与目标文件相连接的函数库有错误,可能的原因是函数库名错误、指定的函数库所在目录名称错误等,检查的方法是使用find命令在可能的目录中寻找相应的函数库名,确定档案库及目录的名称并修改程序中及编译选项中的名称。

第四类∶未定义符号错误信息∶有未定义的符号(Undefined symbol)。

这类错误是在连接过程中出现的,可能有两种原因∶一是使用者自己定义的函数或者全局变量所在源代码文件,没有被编译、连接,或者干脆还没有定义,这需要使用者根据实际情况修改源程序,给出全局变量或者函数的定义体;二是未定义的符号是一个标准的库函数,在源程序中使用了该库函数,而连接过程中还没有给定相应的函数库的名称,或者是该档案库的目录名称有问题,这时需要使用档案库维护命令ar检查我们需要的库函数到底位于哪一个函数库中,确定之后,修改gcc 连接选项中的-l和-L项。

排除编译、连接过程中的错误,应该说这只是程序设计中最简单、最基本的一个步骤,可以说只是开了个头。

c语言常见编译错误提示

c语言常见编译错误提示

c语言常见编译错误提示1) error C2001: newline in constant编号:C2001直译:在常量中出现了换行。

错误分析:1.字符串常量、字符常量中是否有换行。

2.在这句语句中,某个字符串常量的尾部是否漏掉了双引号。

3.在这语句中,某个字符创常量中是否出现了双引号字符“"”,但是没有使用转义符“\"”。

4.在这句语句中,某个字符常量的尾部是否漏掉了单引号。

5.是否在某句语句的尾部,或语句的中间误输入了一个单引号或双引号。

2) error C2015: too many characters in constant编号:C2015直译:字符常量中的字符太多了。

错误分析:单引号表示字符型常量。

一般的,单引号中必须有且只能有一个字符(使用转义符时,转义符所表示的字符当作一个字符看待),如果单引号中的字符数多于4个,就会引发这个错误。

另外,如果语句中某个字符常量缺少右边的单引号,也会引发这个错误,例如:i f (x == 'x || x == 'y') { … }值得注意的是,如果单引号中的字符数是2-4个,编译不报错,输出结果是这几个字母的ASC码作为一个整数(int,4B)整体看待的数字。

3) error C2137: empty character constant编号:C2137直译:空的字符定义。

错误分析:原因是连用了两个单引号,而中间没有任何字符,这是不允许的。

4) error C2018: unknown character '0x##'编号:C2018直译:未知字符‘0x##’。

错误分析:0x##是字符ASC码的16进制表示法。

这里说的未知字符,通常是指全角符号、字母、数字,或者直接输入了汉字。

如果全角字符和汉字用双引号包含起来,则成为字符串常量的一部分,是不会引发这个错误的。

5) error C2041: illegal digit '#' for base '8'编号:C2141直译:在八进制中出现了非法的数字‘#’(这个数字#通常是8或者9)。

常见gcc 编译错误整理

常见gcc 编译错误整理

常见gcc 编译错误整理常见gcc 编译错误整理(开始) 11 error: expected expression before 'else' else之前无表达式。

2 error: lvalue required as left operand of assignment 左值问题。

3 error: invalid storage class for function 'XXXXXX' 在文件的某个地方,丢失了一个大括号‘}’。

常见gcc编译警告整理(开始)1、warning: no newline at end of file 在文件最后一行加上回车键解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing abackslash/newline sequence.c/c++代码的每一行后面有一个“结束符”,也就是newline。

避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。

常见gcc编译警告整理以及解决方法【收藏】

常见gcc编译警告整理以及解决方法【收藏】

常见gcc编译警告整理以及解决方法【收藏】
1、warning: no newline at end of file
 在文件最后一行加上回车键
 解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:
 A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing a backslash/newline sequence.
 c/c++代码的每一行后面有一个结束符,也就是newline。

避免当被include
的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。

 2、warning: comparison between pointer and integer
 解释:integer与pointer比较
 3、warning: assignment discards qualifiers from pointer target type。

C语言编译错误大全

C语言编译错误大全
51: Incompatible storage class — 存储类别不相容
52: Incompatible type conversion — 不相容的类型转换
53: Incorrect number format — 错误的数据格式
54: Incorrect use of default — Default使用不当
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 -> — 符号->的左边必须是指针
1、一般是你在调用函数的时候传递的是int类型的数据,但那个函数定义的参数类型不是int(比如是结构或者指针或者数组)。
2、下面为C语言的错误大全及中文解释:
1: Ambiguous operators need parentheses — 不明确的运算需要用括号括起
2: Ambiguous symbol xxx — 不明确的符号
47: Illegal use of floating point — 非法的浮点运算
48: Illegal use of pointer — 指针使用非法
49: Improper use of a typedefsymbol — 类型定义符号使用不恰当
50: In-line assembly not allowed — 不允许使用行间汇编

(完整word版)C语言程序编译常见错误对照

(完整word版)C语言程序编译常见错误对照
分析:例如“int *pa,*pb,*a; a = pa + pb;”中两个指针变量不能进行“+”运算
error C2117: 'xxx' : array bounds overflow
中文对照:(编译Байду номын сангаас误)数组xxx边界溢出
分析:一般是字符数组初始化时字符串长度大于字符数组长度,例如“char str[4] = "abcd";”
中文对照:(编译错误)重复定义形式参数xxx
分析:函数首部中的形式参数不能在函数体中再次被定义
error C2084: function 'xxx' already has a body
中文对照:(编译错误)已定义函数xxx
分析:在VC++早期版本中函数不能重名,6.0版本中支持函数的重载,函数名可以相同但参数不一样
error C2048: more than one default
中文对照:(编译错误)default语句多于一个
分析:switch语句中只能有一个default,删去多余的default
error C2050: switch expression not integral
中文对照:(编译错误)switch表达式不是整型的
error C2017: illegal escape sequence
中文对照:(编译错误)转义字符非法
分析:一般是转义字符位于' '或" "之外,例如“char error = ' '\n;”
error C2018: unknown character '0xhh'

常见编译运行错误1

常见编译运行错误1

常见编译错误
引言
刚开始接触代码的时候的由于自己对知识点的不了解,达不到准确的应用,所以会发生一些常见的编译异常。

这是很多新手都会遇到的问题,所以小慕为大家准备了一些常见的编译错误和解决方法。

Tips:如果在编程中出现编译错误,可以将光标移动到代码飘红处,然后会出现如下提示,建议同学仔细阅读提示中的英文(如果有不明白的地方,可以去使用翻译软件进行翻译)
1、重复定义相同变量名(导致编译错误)
示例代码
错误原因:该错误是d1这个变量重复定义了,也就是说一山不容二虎,如果同为方法内的变量,就不可以重复定义相同的变量名。

改为double d2 = d即可。

2、类型不匹配:无法将字符串转换为字符
示例代码
错误原因
char类型的数据表示一个字符,它可以是a,或者是1,但是不能用双引号老表示,只能用单引号来表示。

双引号表示的是字符串,应该用String类型的数据来接收。

3、final关键字修饰的常量无法再次赋值
示例代码
错误原因
final关键字修饰的常量是无法再进行赋值的,否则会出现上图中的编译错误。

4、超出类型取值范围的错误
示例代码
错误原因
int类型数据的取值范围是-2的31次方到2的31次方-1所以103948583923948超出了int类型的取值范围,应改用long类型(长整型),需要在103948583923948后加一个L。

gcc编译报错解决方案

gcc编译报错解决方案

Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。

-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。

如果不给出这个选项,gcc就给出预设的可执行文件a.out。

1.linker input file unused because linking not done我在Windows下使用SQLite编了个C++程序,在编写Makefile并使用cygwin 中的g++进行编译链接时遇到如下的错误:linker input file unused because linking not done我的语句是g++ -c a.cpp -lsqlite3到网上查了一下,问题出在链接数据库的语句不应出现在编译语句里面。

上面的语句里面有-c 即编译compile,所以命令会忽略掉所有的-l 链接库的命令。

而要链接数据库,应该在生成可执行文件时才使用。

正确的使用链接的语句应该是g++ a.o -L. -lsqlite3 -o exename2.Linux系统的头文件和库文件搜索路径**#include**的头文件,连结数据库,系统定义,总共有下列来源指定gcc去那找。

∙当初在编译时指定的(在~gcc/gcc/collect2.c:locatelib()∙写在specs内的(针对rpm包)∙后来用-D -I -L指定的∙gcc环境变量设定(编译的时候)∙ld.so的环境变量(这是run time的时候)头文件gcc 在编译时如何去寻找所需要的头文件:∙header file的搜寻会从-I开始∙然后找gcc的环境变量C_INCLUDE_PA TH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PA TH∙再找内定目录:o/usr/includeo/usr/local/includeo/usr/lib/gcc-lib/i386-linux/2.95.2/includeo/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3o/usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include∙库文件但是如果装gcc的时候,是有给定的prefix的话,那么就是o/usr/includeo prefix/includeo prefix/xxx-xxx-xxx-gnulibc/includeo prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include库文件cos()等函式库的选项要多加-lm∙编译的时候:gcc会去找-L∙再找gcc的环境变量LIBRARY_PATH∙再找内定目录/lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的运行时动态库的搜索路径1 在配置文件/etc/ld.so.conf中指定动态库搜索路径2 通过环境变量LD_LIBRARY_PA TH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)3 在编译目标代码时指定该程序的动态库搜索路径(还可以在编译目标代码时指定程序的动态库搜索路径。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常见gcc 编译错误整理(开始)1
1 error: expected expression before 'else'
else之前无表达式。

2 error: lvalue required as left operand of assignment
左值问题。

3 error: invalid storage class for function 'XXXXXX'
在文件的某个地方,丢失了一个大括号‘}’。

常见gcc编译警告整理(开始)
1、warning: no newline at end of file
在文件最后一行加上回车键
解释:在《Rationale for the C99 standard》一文中,有C99的相关信息:
A backslash immediately before a newline has long been used to continue string literals, as well as preprocessing command lines. In the interest of easing machine generation of C, and of transporting code to machines with restrictive physical line lengths, the C89 Committee generalized this mechanism to permit any token to be continued by interposing a
backslash/newline sequence.
c/c++代码的每一行后面有一个“结束符”,也就是newline。

避免当被include的文件展开后,前一个文件的最后一行与后一个文件的第一行直接被连接成一行从而造成错误。

2、warning: comparison between pointer and integer
解释:integer与pointer比较
3、 warning: assignment discards qualifiers from pointer target type
解释:赋值时,取消了右值的限定。

4、 warning: passing argument 1 of 'send' makes pointer from integer without a cast
解释:函数send的第一个integer型参数没有强制转换为pointer型
5、warning: comparison is always true due to limited range of data type
解释:由于数据类型范围的限制,比较结果一直为真。

6、warning: initialization from incompatible pointer type
解释:不兼容指针类型的初始化
7、 warning: return makes pointer from integer without a cast
解释:return使integer转换为pointer,没有加强制类型转换。

8、warning: incompatible implicit declaration of built-in function 'printf'
解释:与内置的printf函数隐士声明不兼容。

9、warning: initialization discards qualifiers from pointer target type
解释:initialization取消了指针目标类型的限定。

10、warning: comparison is always false due to limited range of data type
由于类型限制,比较一直是假
11、warning: assignment from incompatible pointer type
不兼容的指针间赋值
12、warning: passing argument 1 of 'mes_read_time' discards qualifiers from pointer target type12、mes_函数第一个参数的传递,丢弃了指针目标类型限定。

13、warning: "protocol_type" redefined
——type重定义
14、warning: 'return' with a value, in function returning void 在void返回类型的函数中,return返回值。

相关文档
最新文档