一、实验目的
1.掌握Linux进行C语言编程的基本方法;
2.练习并掌握 Linux 提供的 vi 编辑器来编译 C 程序;
3.熟悉编译流程,学会利用 gcc、gdb 编译、调试 C 程序。
二、实验内容
1.学会使用gcc编译C程序,利用gdb调试程序;
2.在Linux下编辑、编译、运行该程序;
3.使用vim编写makefile文件,编译main.c文件,并编写相应的清除功能;
4.使用gcc编写C语言程序,编译并观察编译后的结果,运行生成的可执行文件。
三、实验器材(设备、元器件)
(一)装有VMware软件的计算机一台(虚拟机软件)
(二)系统镜像文件
四、实验步骤
1.编写代码
先在用户根目录下创建一个工作文件夹:C_file,所有的C语言练习都保存到这个工作目录下,创建目录过程如下;
进入创建的C_file文件夹,然后创建一个名为“hh”的文件夹来保存我们的“Hello World”程序相关文件,创建工作文件夹过程如下:
实验过程中会使用到VI编译器,vi可以分为三种模式,分别是一般模式、编辑模式及命令行模式,我们需要先做以下配置:
1.1设置TAB键为4字节
VI编译器默认TAB1键为8空格,我们改为4空格,用vi打开文件/etc/vim/vimrc,在此文件输入set ts=4即可;
1.2 VIM编译器显示行号
VIM编译器默认是不显示行号的,我们设置VIM编译器显示行号,同样是在文件/etc/vim/vimrc中添加代码来实现,在文件最后面加入set nu 即可;
修改完成后按Esc进入命令模式输入冒号及wq保存并关闭文件。
1.3 编写代码
C程序通常以.c扩展名结尾。可以使用任何文本编辑器来编写C程序,例如vim、nano、gedit等。在编辑器中打开一个新文档,然后编写C代码。VI编译器可以自行定制,在前面创建的“hh”文件夹里,使用vi指令创建一个名为“main.c”的文件,然后输入如下代码;
在一般模式下输入“i”即可进入编辑模式,编辑完成后,按【Esc】键就可以跳出编辑模式,此时输入“:wq”然后回车即可保存当前数据并退出。
1.4 保存退出
编写完成后保存退出vi编辑器,可以使用“cat”命令查看代码是否编写成功,如图所示,编辑成功后需要对其进行编译。
2、编译代码
2.1 Ubuntu下的C语言编译器是GCC,GCC编译器在我们装Ubuntu的时候已经默认装好,可以通过gcc –v命令查看GCC编译器的版本号,gcc的编译过程如下:
2.2 使用GCC编译器来编译main.c文件,由于GCC编译器是命令模式,所以需要输入命令来使用gcc编译器来编译文件。
当编译完成后会生成一个a.out文件,这个文件就是编译生成的可执行文件,执行文件看看是否和我们代码的功能一样,执行“./+可执行文件”命令即可;文件后端输出“Hello World”正是main.c实现的功能,说明程序没有错误。
2.3 只编译不链接为可执行文件,编译器将输入的.c文件编译为.o文件;
2.4 在使用gcc命令的时候加上-o来指定生成的可执行文件名字
3、运行程序
程序编译完成后,可以通过执行可执行文件来运行程序。程序运行时会输出“Hello World!”
4、调试程序
调试是在开发过程中非常重要的部分。在Linux上,GDB是最流行的调试器之一。GDB可以帮助开发人员在程序中找到错误,并支持逐步执行,设置断点等功能。要使用GDB,需要在编译时添加“-g”选项,以便在执行文件中生成调试信息。
5.make工具及Makefile使用
利用make工具可以自动完成编译工作,这些工作包括:
- 如果修改了某几个源文件,则重新编译这几个源文件;
- 如果某个头文件被修改了,则重新编译所以包含该头文件的源文件;
- 新建下面几个文件夹并使用Makefile:
5.1 main.c文件内容如下:
5.2 input.c文件内容如下:
5.3 calcu.c文件内容如下:
5.4 input.h文件内容如下:
5.5 calcu.h文件内容如下:
以上就是过程所有文件,在终端输入gcc main.c input.c calcu.c –o main命令对这三个文件进行编译,编译完成后执行main这个程序,测试一下软件是否正常工作。
如果修改的文件过多,就会忘记哪些文件被修改过,所以需要使用到Makefile这个工具:
- 如果工程没有编译过,那么过程中所以.c文件都要被编译并且链接成可执行文件;
- 如果工程中只有个别C文件被修改了,那么编译这些C文件即可;
- 如果工程头文件被修改,那么我们需要编译所有引用这个头文件的C文件,并且链接成可执行文件。
很明显,能够实现这个功能就是Makefile,在工程目录下创建名为“Makefile”,文件名固定,区分大小写,文件内容如下;
注:上述代码首行空出来一定要使用”TAB”键,不要使用空格,这是Makefile语法要求。
实现Makefile功能如下: