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$@
- linux学习笔记二(linux下c编程基础)
- linux下C编程学习笔记之线程学习(二)
- linux下c/c++编程--学习笔记(头文件)
- linux环境下C编程(二)
- linux下shell编程笔记(二)
- linux下c编程基础
- Linux 基础学习笔记(二)
- Linux 基础入门(二)--学习笔记
- Linux下C语言编程基础——Makefile文件学习笔记
- Linux C 多线程编程学习(二)
- linux C 编程 一站式学习(二)
- 关于Linux下mysql的C/C++基础编程笔记
- [LINUX内核编程]学习笔记(二)
- Linux下Socket编程学习(二)
- linux下C编程笔记
- linux下c编程笔记
- linux下C编程笔记
- Linux 下C编程笔记
- intent 学习笔记
- mongodb入门之mongodb基本语法
- HDU 1150 -- Machine Schedule (最小点覆盖)
- android服务器端开发框架--jersey+hibernate+spring+annotation
- python 学习笔记——python metaclass 元类
- linux学习笔记二(linux下c编程基础)
- java遍历文件
- mongodb入门之mongodb配置文件
- C语言正则表达式
- RobotFramework+Selenium2环境搭建与入门实例
- 高性能网关设备及服务实践
- 查找
- springMvc传递对象参数一些问题
- mongodb入门之mongodb客户端使用