1、头文件报错
预处理阶段出现通常为头文件路径错误或文件名写错导致的。(以hello.c这个文件为例)
报错时出现的提示:
hello.c:5:19: fatal error: inc/a.h: 没有那个文件或目录
compilation terminated.
2、语法错误
在编译阶段出现 ,通常为标点符号或中文问题 。
报错时出现的提示:
语法错误:
未定义变量r:
数据类型错误,注意检查
hello.c: In function ‘main’:
hello.c:10:2: error: expected ‘;’ before ‘func’
func();
^中文符号:
hello.c: In function ‘main’:
hello.c:9:2: error: stray ‘\357’ in program
printf(“PI=%.2f\n”, PI);
^
hello.c:9:2: error: stray ‘\274’ in program
hello.c:9:2: error: stray ‘\233’ in program
hello.c:10:2: error: expected ‘;’ before ‘func’
func();
^
3、未定义标识符
3. 未定义标识符变量/函数没有定义或声明就使用
报错时出现的提示:
hello.c: In function ‘main’:
hello.c:12:19: error: ‘pelpe’ undeclared (first use in this function)
printf(“%.2d\n”, pelpe);
^
hello.c:12:19: note: each undeclared identifier is reported only once for each function it appears in
4、归档错误及连接错误
归档错误及连接错误引用了其他文件或库中的函数 而没有声明 或 函数名字错误
/tmp/cclYp5VM.o:在函数‘main’中:
hello.c:(.text+0x42):对‘func’未定义的引用
collect2: error: ld returned 1 exit status
5、逻辑错误
bug 程序可以运行 但 没有达到预期效果甚至出现错误
解决方法:对于出现的错误第一条到第四条,可以对症下药,vim进入文件针对不同的错误,查找报错的原因,并且改正。针对第五个出现bug的现象,有以下两种可以尝试解决的方法。
1、printf()打印法,可以对一些位置的变量进行值输出,进而查找出bug
2、GDB 调试器: 软件调试工具,字符界面调试功能 ;
使用:
1. 编译时添加-g 选择 附加调试信息(示例文件 shuzu.c)
gccshuzu.c-g -o gdb.out-g使用gbd调试 -o :将文件名改为gbd。out
2.使用gdb运行调试程序
gdb gdb.out进入调试后通过以下的指令进行调试:
gdb 命令
l 查看程序源码
设置断点断点: 程序 运行到这里就会暂停
b 行号
info b 查看所有的断点运行代码
r
查看程序中变量的值单步运行:一次执行一行C代码
(gdb) n 运行一行
(gdb) s 若这一行是函数调用,s则进入函数
恢复程序运行
(gdb) c删除断点
del 1删除断点1quit 退出gdb