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删除断点1

quit 退出gdb