linux下c语言读取docx,linux下C语言使用编译与调试试验.docx

实验四:LINUX 下 C 语言使用、编译与调试实验 一、目的:

练习并掌握 Linux 提供的 vi 编辑器来编译 C 程序

学会利用 gcc、gdb 编译、调试 C 程序

学会使用 make 工具

二、内容

1、 编写 C 语言程序,用 gcc 编译并观察编译后的结果,运行生成的可执行文件。 2、 利用 gdb 调试程序。

3、 学习编写 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!

:w

q

ZZ

:x

:w

:q

离开 vi,并放弃刚在缓冲区内编辑的内容

将缓冲区内的资料写入磁盘中,并离开 vi

同 wq

同 wq

将缓冲区内的资料写入磁盘中,但并不离开 vi

离开 vi,若文件被修改过,则要被要求确认是否放弃修改的内容, 此指令可与:w 配合使用

1

(3)命令模式下光标的移动

h

0(零)

$

^

H

M

L

G

W, w

B, b

(4) 命令模式下的编辑命令

dd

yy

p

P

x

X

u

·

2、GNU C 编译器

1) 使用 gcc

左移一个字符

下移一个字符

上移一个字符

右移一个字符

移至该行的行首

移至该行的行尾

移至该行的第一个字符处 移至窗口的第一行 移至窗口中间那一行 移至窗口的最后一行 移至该文件的最后一行 下一个单词 (W 忽略符号)

上一个单词 (B 忽略符号)

删除当前光标所在行

复制当前光标所在行

将复制的内容粘贴在光标所在的位置后 将复制的内容粘贴在光标所在的位置前 删除当前光标字符

删除当前光标之前字符

撤消

重做

通常后跟一些选项和文件名来使用 gcc 编译器。gcc 命令的基本用法如下:

gcc [options] [filenames]

命令行选项指定的编译过程中的具体操作

2) gcc 常用选项

当不用任何选项编译一个程序时,gcc 将建立(假定编译成功)一个名为 a.out 的可执 行文件。

选项含义:

-o FILE

指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果 FILE

2

unsigned

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);

有指定,默认文件名是 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()函数

3

#include

#include

#include

int main(int argc, char *argv[])

{

unsigned int x, y;

unsigned long long res;

if ((argc<3) || (sscanf(argv[1], "%u", &x)) != 1 || (sscanf(argv[2], "%u", &y)) != 1 ) {

printf("U

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值