简单网站建设哪家便宜,四川省工程建设信息网,网站icp备案 年检,精通网站建设pdf下载目录 一、编辑器vim
1、概念
2、基本操作
1、进入vim
2、模式切换
3、命令行模式
4、插入模式
5、底行模式
6、vim 的配置
二、编译器gcc/g
1、概念
2、背景知识
3、gcc/g中的编译链接
1、预处理
2、编译
3、汇编
4、链接
4、函数库
1、静态库
2、动态库 一…目录 一、编辑器vim
1、概念
2、基本操作
1、进入vim
2、模式切换
3、命令行模式
4、插入模式
5、底行模式
6、vim 的配置
二、编译器gcc/g
1、概念
2、背景知识
3、gcc/g中的编译链接
1、预处理
2、编译
3、汇编
4、链接
4、函数库
1、静态库
2、动态库 一、编辑器vim
1、概念
vim是一种常用于linux下的多模式编辑器。在vim中有好多模式我们先了解这三种即可分别是命令行模式command mode、插入模式Insert mode和底行模式last line mode。 1、正常/普通/命令模式(Normal mode) 控制屏幕光标的移动字符、字或行的删除移动复制某区段及进入Insert mode下或者到 last line mode 2、插入模式(Insert mode) 只有在Insert mode下才可以做文字输入按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。 3、底行模式(last line mode) 文件保存或退出也可以进行文件替换找字符串列出行号等操作。 在命令模式下shift: 即可进入该模式。 vim作为一种编辑器它只能用来写代码至于代码是否编译成功和是否能够运行成功它一概不关注它只能用来进行代码的编辑。
三种模式之间的切换 注q!强转退出 wq保存并退出。
2、基本操作
1、进入vim
输入命令vim 文件名。进入vim全屏幕编辑画面。进入之后是处于命令行模式你要切换到插入模式才能够输入文字进行编辑。
2、模式切换
三种模式的切换见上图。
3、命令行模式
命令行模式下的常用命令
1、yy将光标当前所在行的内容进行复制。n yyn表示具体整数表示可以复制从该行开始的n行内容。
2、p将复制的内容进行粘贴。n p将复制的内容粘贴n行。
3、u撤销操作。
4、ctrl r撤销u操作。
5、光标定位
shift g将光标定位到文件的结尾。
gg将光标定位到文件的开始。
n shift g 将光标定位到文件的任意一行。
shift 6^将光标定位到当前行的最开始。
shift 4$将光标定位到当前行的结尾。
h、j、k、l光标分别进行 左、下、上、右的操作。
6、dd将光标所在行的内容删除。n dd将光标所在行以及下面的n行内容删除。
dd p相当于剪切。
7、shift ~将字母进行大小写切换。
8、shift r进入替换模式。esc退出。
9、r替换光标所在的字符。n r。
10、x or shift x删除光标所在的字符。n x。
4、插入模式
从命令行模式到插入模式
1、按「i」切换进入插入模式「insert mode」按“i”进入插入模式后是从光标当前位置开始输入文件。 2、按「a」进入插入模式后是从目前光标所在位置的下一个位置开始输入文字。 3、按「o」进入插入模式后是插入新的一行从行首开始输入文字。
5、底行模式
底行模式下的命令
1、set nu 或者 set nonu调出或取消行号。
2、多屏操作
vs 文件名就可以进入分屏操作模式。光标在哪个分屏就是可以操作的文件。
ctrl w按两次切换操作屏。
w写入 q退出。
:!命令可以执行Linux下的命令llman./a.outg等。在底行模式下还可以输入命令进行编译g和运行。
6、vim 的配置
没有配置的vim用起来其实和记事本并没有多大的区别不能自动补齐也不能自动缩进使用起来不是很方便。所以vim实际上是需要配置的。
但是配置vim比较麻烦配置的东西比较多作为刚入门的我们并不知道需要配置哪些东西所以我们直接在家目录下执行一键配置的命令即可
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh bash ./install.sh 二、编译器gcc/g
1、概念
gccg是一个专门用来编译链接C语言C的编译器。
gcc只能编译c语言g可以编译c语言和c。
2、背景知识
程序翻译的过程本质上是将文本的C语言或其他语言转成计算机能够识别的二进制。转换过程
1、预处理去注释进行宏替换头文件展开条件编译等。 2、编译生成汇编语言将C语言等语言编译成汇编语言。 3、汇编将汇编语言转换成可重定向二进制目标文件。 4、连接生成可执行文件或库文件。将多个 .o文件Linux下 或 .objWindows下 文件合并形成一个可执行文件 .exewindows下。
注编译过程为 扫描程序--语法分析--语义分析--源代码优化--代码生成器--目标代码优化。 1、扫描程序进行词法分析从左向右从上往下扫描源程序字符识别出各个单词确定单词类型。 2、语法分析是根据语法规则将输入的语句构建出分析树或者语法树也就是分析树parse tree或者语法树syntax tree。 3、语义分析是根据上下文分析函数返回值类型是否对应这种语义检测可以理解语法分析就是描述一个句子主宾谓是否符合规则而语义用于检测句子的意思是否是正确的。 4、目标代码生成指的是把中间代码变换成为特定机器上的低级语言代码。
3、gcc/g中的编译链接
同样地gcc/g下也需要像上面那样一步一步形成最终的可执行文件。
语法gcc 要编译的文件 -o 自己命名的可执行文件。如下绿色的就是可执行文件。 zdl.c中的内容 代码里面有宏有头文件有注释有条件编译可以验证我们接下来的内容。
1、预处理
但是其实上面的做法是直接一步到位直接形成了可执行程序。而我们为了验证gcc/g是否会走上面的步骤我们需要一步一步来看。所以我们要使用下面的命令
gcc -E zdl.c -o test.i
-E从现在开始进行程序的翻译如果预处理完成就停下来。
上面的命令表示我们将预处理完成之后形成的内容写到了一个临时文件 test.i。所以预处理的内容还是C语言就在test.i中。如下 我们发现842行的宏被替换了注释也没有了条件编译也执行了头文件也展开了。
2、编译
接着我们执行下面的命令将预处理完成的代码编译成汇编语言。
-S从现在开始进行程序的翻译如果编译完成就停下来。
gcc -S test.i -o test.s test.s就是汇编文件。 上图就是编译完成后汇编文件内容。
3、汇编
然后我们执行下面的命令
gcc -c test.s -o test.o
-c从现在开始进行程序的翻译如果汇编完成就停下来。
形成了二进制文件。test.o就是可重定向二进制目标文件。 我截取了其中一部分来看一看 上图就是二进制文件的部分内容。
4、链接
最后对可重定向二进制目标文件进行链接使用如下命令
gcc test.o -o mytest 上图中mytest就是最终的可执行程序以及其执行结果。
4、函数库
首先我们知道C/C都有自己的标准库。 我们来看一个问题在我们的C程序中并没有定义“printf”的函数实现且在预编译中包含的“stdio.h”中也只有该函数的声明而没有定义函数的实现那么是在哪里实“printf”函数的呢 答案就是系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了在没有特别指定时gcc 会到系统默认的搜索路径“/usr/lib”下进行查找也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了而这也就是链接的作用。 这些库文件是现成的是已经实现好了的我们可以直接使用。当我们使用库中函数的时候其中我们自己只是调用了该函数没有真正地实现它只有当链接的时候对应的实现才能和我们的代码关联起来。
一般链接的过程有两种方式1、动态链接要动态库2、静态链接要静态库。
1、静态库 静态库是指编译链接时把库文件的代码全部加入到可执行文件中因此生成的文件比较大但在运行时也就不再需要库文件了。其后缀名一般为“.a” 静态链接将库中方法的实现真的拷贝到我们的可执行程序中。
2、动态库 动态库是指在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库这样可以节省系统的开销。动态库一般后缀名为“.so”如前面所述的 libc.so.6 就是动态库。gcc 在编译时默认使用动态库。 动态链接将库中我要的方法的地址填入我的可执行程序中建立关联。