c程序gcc编译常见报错及解决方法整理
目录
- 一、简介
- 二、常见报错及解决方法
- 1、数组定义错误
- 2、Not enough information to produce a SYMDEFs file
- 3、文件乱码<U+0000>
- 4、未定义或未申明报错
- 5、代码中误加入中文
- 三、其他相关链接
一、简介
本文主要是整理c程序编译过程的常见报错的解决方法,方便大家及时解决问题。
二、常见报错及解决方法
1、数组定义错误
../../Libs/cmd/cmd_reboot.c:29:69: error: excess elements in array initializer [-Werror]
unsigned long pmu_arr[3] ={ 0x082000a3, 0xf72000a2, 0x7f2190a2, 0xff };
^~~~
1 error generated.
common.mk:322: recipe for target 'obj_dir/cmd_reboot.o' failed
定义一个数组 a[n],说明该数组有n个元素,那么这个数组中元素最大的下标是 n–1;而元素 a[i] 表示数组 a 中第 i+1 个元素,数组修改为如下表示即可。
unsigned long pmu_arr[] = { 0x082000a3, 0xf72000a2, 0x7f2190a2, 0xff };
unsigned long pmu_arr[4] = { 0x082000a3, 0xf72000a2, 0x7f2190a2, 0xff };
2、Not enough information to produce a SYMDEFs file
"/tmp/aerY4D", line 73 (column 6): Warning: L6312W: Empty Execution region description for region _lu_data
Error: L6388E: ScatterAssert expression (ImageLimit(_guard) <= (0x880010000 + 0x70000 - (0x20 * 0x400))) failed on line 79 : (0x880078180 <= 0x880078000)
Not enough information to produce a SYMDEFs file.
Finished: 1 information, 1 warning and 1 error messages.
解决方法:
这种报错一般是每个工程目录下有个.sct文件指定的每个工程的内存空间大小,可以根据需要根据需要修改内存值,但是要注意不要跟其他空间重叠,具体定义示例如下。
3、文件乱码<U+0000>
11-19 10:42:20.779 W ../../Share/Lib/InfoPage.c:1161:7: error: null character ignored [-Werror,-Wnull-character]
11-19 10:42:20.779 W <U+0000><U+0000><U+0000><U+0000><U+0000><U+0000><U+0000>
出现这种方式主要是在linux和windows下交叉修改代码导致,Windows的默认编码为GBK,Linux的默认编码为UTF-8。
解决方法:设置程序编码方式
以source insight为例,单个文件乱码解决办法:
方法一:菜单栏中【File】 > 【Reload As Encoding…】 > 【Chinese Simplified (GB18030)】 > 选择后,点击load,问题解决!!!
方法二:可以直接将文件结尾部分多余的空行删掉即可。
所有文件乱码解决办法:
菜单栏中 【Options】 > 【Preferences】 >File标签中,最下面的“Default encoding” :改成System Default(Windows ANSI) 或者Chinese Simplified(GB2312) CP:936,点击确定,问题解决!!!
4、未定义或未申明报错
如果只声明函数而没有定义函数(函数的具体实现部分),那么就会直接报错:
Error: L6218E: Undefined symbol function“XXX” (referred from main.o)!
如果没有声明,但是已经定义了函数,只是会出现警告:
Warning: #223-D: function “XXX” declared implicitly!
关于警告Warning:Implicit declaration of function “xxx” is invalid in C99!,说明函数已经定义,是函数的声明存在问题,检查以下几点:
1.函数的声明放在头文件(H文件);
2.函数定义在源文件(C文件);
3.函数的名称是否一致(大小写要一致);
4.声明被调用函数的头文件已经被包含(#include);
5.函数声明的先后顺序(被调用的函数声明放在执行调用函数的声明前面)。
5、代码中误加入中文
if (r_scratch->s[16] ==PM_SP_FLAG ? TRUE : FALSE<U+FF09>
//出现<U+FF09>报错删除相应报错点代码即可。
三、其他相关链接
1、C语言常用函数详细总结
2、C语言中指针、数组作为作为函数参数使用总结
3、C语言常见数据类型字节数和打印格式总结
4、C语言、Makefile和shell中添加打印调试信息总结
5、c语言volatile关键字总结