实验四:LINUX 下C语言使用、编译与调试实验
一、目的:
练习并掌握Linux提供的vi编辑器来编译C程序
学会利用gcc、gdb编译、调试C程序
学会使用make工具
二、内容
编写C语言程序,用gcc编译并观察编译后的结果,运行生成的可执行文件。
利用gdb调试程序。
学习编写makefile,并进行编译。
三、操作
1、文件编辑器vi
进入vi,直接执行vi编辑程序。
例:# vi test.c
显示器出现vi的编辑窗口,同时vi会将文件复制一份至缓冲区(buffer)。vi先对缓冲区的文件进行编辑,保留在磁盘中的文件则不变。编辑完成后,使用者可决定是否要取代原来旧有的文件。
1) vi的工作模式
(1)输入模式
输入以下命令即可进入vi输入模式:
a 在光标之后加入资料A 在该行之末加入资料i在光标之前加入资料I 在该行之首加入资料o新增一行于该行之下O新增一行于该行之上(2)命令模式
在输入模式下,按ESC可切换到命令模式。命令模式下,可选用下列指令离开vi:
:q!离开vi,并放弃刚在缓冲区内编辑的内容:wq将缓冲区内的资料写入磁盘中,并离开viZZ同wq:x同wq:w将缓冲区内的资料写入磁盘中,但并不离开vi:q离开vi,若文件被修改过,则要被要求确认是否放弃修改的内容,此指令可与:w配合使用(3)命令模式下光标的移动
h左移一个字符j下移一个字符k上移一个字符l右移一个字符0(零)移至该行的行首$移至该行的行尾^移至该行的第一个字符处H移至窗口的第一行M移至窗口中间那一行L移至窗口的最后一行G移至该文件的最后一行W, w下一个单词 (W 忽略符号)B, b上一个单词 (B 忽略符号)(4) 命令模式下的编辑命令
dd删除当前光标所在行yy复制当前光标所在行p将复制的内容粘贴在光标所在的位置后P将复制的内容粘贴在光标所在的位置前x删除当前光标字符X删除当前光标之前字符u撤消·重做
2、GNU C编译器
1) 使用gcc
通常后跟一些选项和文件名来使用gcc编译器。gcc命令的基本用法如下:
gcc [options] [filenames]
命令行选项指定的编译过程中的具体操作
2) gcc常用选项
当不用任何选项编译一个程序时,gcc将建立(假定编译成功)一个名为a.out的可执行文件。
选项含义:
-o FILE 指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE 没
有指定,默认文件名是a.out.
例如,
# gcc test.c
编译成功后,当前目录下就产生了一个a.out文件。
也可用-o选项来为即将产生的可执行文件指定一个文件名来代替a.out。
例如:
#gcc –o count count.c
此时得到的可执行文件就不再是a.out,而是count。
-c GCC 仅把源代码编译为目标代码。默认时GCC 建立的目标代码文件有一个.o 的
扩展名。
-E 对文件进行预处理
-S 对文件进行编译,生成汇编代码。
-O 对源代码进行基本优化。这些优化在大多数情况下都会使程序执行得更快。
-g 在可执行程序中包含标准调试信息。
-Wall 允许发出GCC 能提供的所有有用的警告,也可以用-W(warning)来标识指定的
警告。
-l name链接静态库
-L dir 库文件的搜索路径
3) 执行文件
格式: ./可执行文件名
例:
# ./a.out
# ./count
4) 例子
mypow.c:定义mypow()函数
unsigned long long mypow(unsigned int x, unsigned int y)
{
unsigned long long res=1;
if (y==0)
res = 1;
else if (y==1)
res = x;
else
res = x * mypow(x, y-1);
return res;
}
powtest.c:调用mypow()函数
#include
#include
int main(int argc, char *argv[])
{
unsigned int x, y;
unsigned long lon