linux学习笔记二(linux下c编程基础)

来源:互联网 发布:c语言char a[]= 编辑:程序博客网 时间:2024/05/22 03:02

                                                        

                                                           Vi文本编辑器

Vi文本编辑器有三个模式,1:命令模式  2:插入模式 3:底行模式

1:命令模式:最初进入Vi时为命令模式,只能浏览内容 ,复制,粘贴,删除,但是无法编辑。

 

命令模式下的几个功能键:                    

Ctrl + b:屏幕往后翻一页

Ctrl + f:屏幕往前翻一页

yy:复制当前光标所在行

[n]yy:复制当前光标开始的n行

p:将复制内容粘贴到光标所在行

dd:删除当前光标所在行

[n]dd:  删除当前光标开始的n行

/name:  查找光标之后的名为“name”字符串

?name:查找光标之前的名为”name”字符串

G:光标移动到文件尾(大写)

nG:光标移到第n行

u: 取消之前的操作

 

2:插入模式:按i或insert从命令模式进入插入模式,编辑文件内容。按【esc】退出插入模式,进入命令模式。

 

3:底行模式:在命令模式下按“:”进入底行模式w保存光标位于屏幕的底行,用户保存文件或退出操作,也可设置编译环境,如查找字符串,列出行号。

底行模式下的几个功能键:

q:退出

q!:强行退出

wq:保存退出

w【filename】:另存为filename的文件

set nu:显示行号

set nonu:取消行号

 

Vi的基本流程

(1):进入VI,在命令行下输入vi hello(文件名),进入命令模式,光标位于屏幕上方。

(2):在命令行模式下键入i进入插入模式,在屏幕下方有“插入”或“insert”,编辑文本。

(3):在插入模式下键入esc进入命令模式,再键入:在底行中输入wq,保存退出。

 

 

 

 

Gcc编译器

Gcc能够编译c,c++和Object c等语言写的程序。

Gcc编译流程:4个步骤

1:预处理 2:编译 3:汇编 4:链接

 

1:预处理阶段:Gcc把头文件(如stdio.h)编译进来,用-E查看

指令格式:gcc –E hello.c  –o  hello.i

2:编译阶段:检查代码的规范性,错误等,把代码翻译成汇编语言,用-s查看

指令格式:gcc –s hello.i  –o  hello.s

3:汇编阶段:把.s文件转换成目标文件,用-c查看

指令格式:gcc –c hello.s  –o  hello.o

4:链接阶段:系统把函数的实现都做到libc.so.6的函数库中。

指令格式:gcc hello.o  –o  hello

运行可执行文件: ./hello

 

添加头文件:-I dir linux头文件默认放到了“/usr/include/”目录下,当用户希望添加放置在其他位置上的头文件时,就要用“-I dir”选项来指定。例如放在hello.h放在“/root/workplace/”

格式:gcc  hello.h  -I /root/workplace/ -o hello

 

添加库文件:-L dir linux头文件默认放到了“/usr/lib/”目录下,当用户希望添加放置在其他位置上的库文件时,就要用“-L dir”选项来指定。例如放在hello.h放在“/root/workplace/”

格式:gcc  hello.h  -L /root/workplace/ -o hello

 

Gcc所支持的后缀名

后缀名

对应的语言

后缀名

对应的语言

.c

C原始程序

.s

汇编原始程序

.C/.cc/.cxx

C++源程序

.h

头文件

.m

Object c源

.o

目标文件

.i

预处理过的c

.a/.so

编译后的库文件

.ii

预处理过的c++

 

 

 

 

 






Gcc编译选项列表

所对应的语言

-S

只是编译不汇编,生成汇编代码

-E

只进行预编译,不做其他处理

-g

在可执行程序中包含标准调试信息

-o file

把输出文件输出到file

-v

打印出编译器内部编译各过程的命令行信息和编译器的版本

-I dir

在头文件的搜索路径列表中添加dir目录

-L dir

在库文件的搜索路径列表中添加dir目录

-static

链接静态库

-llibrary

连接名为library的库文件

 

Gcc警告出错选项列表

 

-ansi

支持符合ANSI标准的C程序

-pedantic

允许发出ANSI C标准所列的全部警告信息

-pedantic-error

允许发出ANSI C标准所列的全部错误信息

-w

关闭所有告警

-Wall

允许发出Gcc提供的所有有用的报警信息

-werror

把所有的告警信息转化为错误信息,并在告警发生时终止编译过程

 

GDB调试器

调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好更快地定位程序中的问题从而加快程序开发的进度,是大家共同面对的。就如读者熟知的 Windows 下的一些调试工具, VC自带的如设置断点、单步跟踪等,都受到了广大用户的赞赏。那么, Linux用的就是GDB调试器。

在对源程序用gcc进行编译时,必须加上选项“-g”选项才可以进行调试。

Gdb调试的是可执行文件,不是源代码文件。

输入 gdbhello(可执行文件)

可以看到在启动画面看出gdb版本号等。

几个功能健和使用流程:

1:l(list)查看所载入的文件。

2:b(break)行号/if条件表达式,设置断点 ,设置断点后程序在指定行之前停止

3:info b 查看断点情况

4:r(run)运行代码 ,程序在断点处停止。

5:p + 变量 查看变量值,只有程序在运行或暂停的情况下才可查看变量值

6:n(next)单步运行,不会进入函数

7:s(step)单步运行,会进入函数

8:c(continue)恢复正常运行

 

 

Makefile工程管理器

在实际的项目中,由于文件较多,当文件修改之后,不可能又一个个去编译,只需把最近更新的文件编译一下就好了,makefile就是能够根据文件时间自动发现更新过的文件,减少编译的工作量。

1:makefile基本结构

Target(目标文件):files(依赖文件)

       Command(命令)

建立makefile文件。vi makefile

例:hello.o:hello.chello.h

       Gcc –chello.c –o hello.o

在makefile中的一个command前必须有“TAB”符。

使用make的格式为:make target。

2:makefile变量

在依赖文件较多的时候一个个写是比较麻烦的,特别是需要修改的时候,这是我们一般把依赖文件写出一个变量。定义格式 VAR=var,使用是格式为:$(var)。

例:源指令:target1:file1.o file2.o file3.o

                            Gccfile1.o file2.o file3.o –o target1.o

用变量写:objs=  file1.o file2.o file3.o 

                CC = gcc

                     $(CC)$(objs) -o  target1      

3:自动变量     

命令格式

含义

$*

不包含扩展名的目标文件名称

$+

所有的依赖文件,以空格分开,并以出现的先后顺序,可能包含重复的依赖文件

$<

第一个依赖文件的名称

$?

所有时间戳比目标文件晚的依赖文件,并以空格分开

$

目标文件的完整名称

$^

所有不重复的依赖文件,以空格分开

$%

如果目标是归档成员,则该变量表示目标的归档成员名称

例:源指令:target1:file1.o file2.o file3.o

                            Gccfile1.o file2.o file3.o –o target1.o

       改后:  objs =  file1.o file2.o file3.o 

                  CC = gcc

                     $(CC)  $^  -o$@  

 

0 0
原创粉丝点击