文章目录
- 一. yum命令
- yum的使用
- 二.vim命令(写代码)
- 各模式的互相转化
- 命令模式
- 光标移动的命令
- 复制,粘贴,剪切,撤销
- 撤销
- 字符的转换
- 字符的添加和删除
- 查找
- 注释
- 清除注释
- 替换模式
- 视图模式
- 裸的vim也可支持多文本编译
- vim 报错小技巧(光标改动到报错位置)
- 三.gcc/g++编译器(编译代码)
- 3.1介绍
- 3.1.1gcc
- 3.1.1.1gcc编译指定生成文件
- 3.1.2g++
- 3.2背景知识(编译器和编译语言的关系和编译语言的编译过程)
- 3.2.1编译器和编译语言的关系
- 3.2.2 编译语言生成程序的过程
- 3.3 gcc的生成过程
- 3.3.1预处理解释条件编译
- 3.3.2链接
- 3.3.2.1库:
- 3.3.2.2库的分类:
- 3.3.2.2.1 静态库
- 3.3.2.2.2动态库
- 四.代码自动生成程序(make和Makefile)
- 4.1解释
- make是一个插件
- Makefile是一个解释器(即一个文件)
- 4.2示例
- 4.3make
- 五
- 5.1缓冲区
- 5.2回车
- 5.3 换行
- 回车 加换行
一. yum命令
yum可以比作linux的应用商店:
yum的使用
yum install 软件(下载软件)
yum remove 软件(删除软件)
强制下载和删除:
yum install -y 软件;
yum install -y 软件;
二.vim命令(写代码)
定义:一款文本编译器
vim是一款多模式的编译器
各模式的互相转化
①底层模式
②命令模式转编译模式
命令模式
光标移动的命令
gg命令:将光标移动到开头位置;
shift+g:将光标快速定位到代码的最后一行;
n+shift+g:定位到第n行;(这里的n是一个数字)
shift+6:将光标定位到光标所在行的开头位置
shift+4:将光标定位到光标所在行的末尾位置;
由于shift+6就是^;shift+4就是$;
所以就有了锚点的定义:
H:左移一个字符
J:下移一个字符
** k**:上移一个字符
** I**:右移一个字符
** W后移一个单词
** B前移一个单词(当遇到不是单词的时候就按一个字符一个字符的走)
复制,粘贴,剪切,撤销
(n) yy :复制从当前行向下数n行的内容;
** (n) p**:粘贴当前行向下数n行;
** (n)dd剪切 ;
** u撤销粘贴操作;
撤销
** u** 命令模式下撤销刚才的操作;
** ctrl+r**:撤销刚才的撤销操作(命令模式下的u)
字符的转换
** shift+`:按住这两按键不懂就会依次将原本大写的字符转小写**;将原本小写的字符转大写;
** n+r+自己想加的字符**批量替换光标所在字符,或者多个字符
替换模式:shift+r;
字符的添加和删除
添加
插入模式进行添加;
删除
向后删除:命令模式:n+x:删除当前光标后n个字符;
向前删除:1.插入模式:直接使用使用Backspace键;
2.命令模式:n+shift+x:向前删除n个字符;
查找
shift+3查找同名的单词;按n会在这些同名单词中跳转;
注释
ctrl+v(转化为视图模式)->j/k两个按键上下选中区域—>shift+i-> //->Esc;
清除注释
ctrl+v(转视图模式)->上下左右键转选中区域->d
替换模式
替换模式会将输入的字符覆盖光标所在的字符;
这里撤销使用:命令模式下的u进行取消;
视图模式
裸的vim也可支持多文本编译
1使用vim打开以一个文件;
vim 报错小技巧(光标改动到报错位置)
三.gcc/g++编译器(编译代码)
3.1介绍
c语言:gcc/g++两者都可;
c++语言:g++
原因:g++是c++的编译器;但是c++兼容c语言;
3.1.1gcc
./a.out如果编译报错:
添加**-std=c99**
3.1.1.1gcc编译指定生成文件
gcc 文件名 -o 生成的文件名
3.1.2g++
c++文件有三种写法:
在lunix中多使用**.cc**的写法;
3.2背景知识(编译器和编译语言的关系和编译语言的编译过程)
3.2.1编译器和编译语言的关系
编译语言的历史:
3.2.2 编译语言生成程序的过程
3.3 gcc的生成过程
3.3.1预处理解释条件编译
应用:
vs的社区版本;专业版本;
这里云服务器内只会维护一份这两者中的一份;
3.3.2链接
链接会将.o文件和库函数相结合;
3.3.2.1库:
3.3.2.2库的分类:
3.3.2.2.1 静态库
静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为“.a”
3.3.2.2.2动态库
动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,
而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为“.so”,如前面所述的 libc.so.6 就是动态
库。gcc 在编译时默认使用动态库。完成了链接之后,gcc 就可以生成可执行文件,如下所示。 gcc hello.o –o hello
总结: 开发环境进行开发的全过程:
1准备:
(1)下载头文件,和库文件
(2)设置好头文件查找库文件的路经。
(3)规定好库文件和**.o文件**的 链接方式已备编译时的链接使用
2.编译
预处理
编译
汇编
链接
四.代码自动生成程序(make和Makefile)
4.1解释
make是一个插件
使用它会直接将Makefile中的指令直接生成
Makefile是一个解释器(即一个文件)
他承载所需要的生成的命令
4.2示例
使用方法
推荐
不推荐
这里要讲的是.o文件依赖。s文件就会向下先生成.s文件;make一次可以生成多个文件;
4.3make
make 插件:
1.make的默认规则:
1.默认第一条命令可以直接使用make来使用;后面的的指令需要make加目标文件;
2.Makefile代码中:使用@可以使代码不会回显;
这里使用echo就不会回显了;
3.Makefile中使用单#就可以将文件注释;
4.makefile 支持使用变量来进行编码:
5.makefile 支持依赖关系可以使用简称;
这里的
代
指
c
o
o
d
e
.
c
;
^代指coode.c;
代指coode.c;@代指mybin
5.Makefile中命令不被phony修饰的文件只可以在修改完成后使用一次;而被phony修饰的命令可以被重复使用;
这里的文件没有被修改所以不可以使用make
问题
make怎么知道文件没有被修改呢?
使用的是文件修改时间;
2.文件时间ACM:
access时间:能访问时间;
Modify时间:文件内容修改时间;
Change时间:属性的修改时间;
这里access时间:隔一段时间再进行一次更新;并不是每次都更新;
原因:
由1.2和2得我们可以得到:make判段是否更改的使用的时间 :Modify时间;
五
5.1缓冲区
这里输出会等待两秒后输出;
**出现这种情况的原因:缓冲区(输入缓冲区,输出缓冲区)今天主要是输出缓冲区;
那么缓冲区在哪里呢?
标准输出流;
** 一般输出回 将文件先放在输出中;等待一段时间;再输出;
但是\n可以强制输出;
fflush(stdout);强制输出;
5.2回车
是将光标回到本行首元素
使用\r
这里注意:输出没有使用换行;需要使用fflush(stdout)来强刷新缓冲区;
5.3 换行
将光标换到下一行;