Linux第六章

发布于:2024-05-01 ⋅ 阅读:(33) ⋅ 点赞:(0)

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数C初学者入门训练题解CC的使用文章「初学」C++linux

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

目录

linux开发软件

vim

模式

模式切换

命令模式

底行模式

插入模式

vim创建文件

vim多文件编辑

vim的配置

添加可信任用户

g++/gcc

程序的翻译的过程

预处理

​​​​​​​编译

汇编

链接


linux开发软件

vim

Vim(Vi IMproved)是一款强大的文本编辑器,通常用于在命令行界面中编辑文本文件。它是 Unix 和类 Unix 系统上的一种常见编辑器(主要是进行代码的编写,没有调试/编译功能)

模式

     1)命令模式(默认打开)

     2)底行模式

     3)插入(编辑)模式

模式切换

命令模式进入插入模式
输入a、i、o任意一个

插入模式进入命令模式
点击esc键

命令模式进入底行模式
shift键 + : 

底行模式进入命令模式
点击esc键

注意:插入模式不能直接到底行模式,只能从命令模式到底行模式:shift :wq

命令模式

光标的命令
光标定位:
1)gg(定位到左上角)
2)shift+g(G):定位到代码最后一行
3)n+shift+g:定位到代码的任意一行
4)shift+4($):定位这一行的结尾
5)shift+6(^):定位这一行的开始

光标的移动
h:向左
l:向右
j:向下
K:向上

w:向后(以单词为单位)
b:向前(以单词为单位)

光标所在行
yy:复制当前行
n yy:复制当前n行

yw:复制一个单词
n yw:复制n个单词

p:粘贴内容当前行之后
n p:粘贴n次内容当前行之后

u:撤销

dd:剪切(删除当前行,并复制)
n dd:剪切n行(删除当前n行,并复制)

在一行里面进行操作
shift+`(~):在一行里大小写转化

r:替换光标处所在的字符
n r:替换光标处所在的n个字符

x:删除一个字符
n x:删除n个字符

shfit x(X):向前删除一个字符
n shfit x(X):向前删除n个字符

如果对撤销后悔了:ctrl+r mac:control+r
shift+3(#):查找同名单词,按n单词跳转

底行模式

在底行模式下不能保存文件保存,输入:
w(!):保存当前文件,w!强制保存
q(!):退出vim,q!强制退出
wq(!):保存并推出,wq!强制保存并推出
set nu/nonu:会在文件中的每一行前面列出/删除行号
:! 命令 直接在不退出vim的情况下进行查看,编译,运行等动作
/搜索关键字,按n找下一个

插入模式

在插入模式中,就可以编辑代码了

vim创建文件

vim 文件名
如果文件不存在,在退出vim时保存了文件,这样这个文件就创建了

vim多文件编辑

在底行模式下
vs 文件名

无论你打开多少个文件,光标只有一个!光标在哪一个区域,表示当前正在编辑哪一个文件!

ctrl +ww / ontrol ww:进行两个窗口进行切换

vim的配置

1.基础配置

vim在启动的时候,会自动扫描当前用户的家目录的.vimrc,让.vimrc内部的选项生效

vim配置,其实核心就是向.vimrc里面添加更多的配置选项即可

配置选项:https://blog.csdn.net/Young824/article/details/123529084

2.直接自动化部署配置

bit的vim:https://gitee.com/HGtz2222/VimForCpp?_from=gitee_search
在 root账号:curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

由于sudo执行不了,对命令提权不了

添加可信任用户
1)在root账号下
[root@ALY ~]# vim /etc/sudoers

2)找到
## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL

BCH     ALL=(ALL)       ALL

添加自己账户名格式和上面一样
例如:
账户名     ALL=(ALL)       ALL

3)在底行模式下一定要写入保存,wq!

g++/gcc

gcc: gcc(GNU Compiler Collection,GNU编译器集合)是一个用于编译C语言代码的编译器。它支持多种编程语言,如C、C++、Objective-C、Objective-C++、Java、Fortran等。gcc是一个强大的编译器,可以编译多种语言的代码,并生成可执行文件。

​​​​​​​

g++: g++(GNU C++ Compiler,GNU C++编译器)是一个用于编译C++代码的编译器。它是gcc的一个扩展,用于编译C++代码。g++支持C++语言的所有特性,如类、对象、模板等。g++可以编译C++代码并生成可执行文件。

C++文件后缀

.cpp/.cc/.cxx//这些都是c++文件的后缀,这些没有区别,在于个人习惯

注意:linux不是在乎文件的后缀吗?linux的确不在乎文件名后缀,但是g++/gcc这些软件在乎文件名后缀

程序的翻译的过程

以.c文件为例,C源文件(文本文件)->预处理->编译->汇编->链接->可执行程序

预处理

预处理完后还是c语言,只是代码更加简洁

1)头文件展开

 就是把所包含的头文件的源文件拷贝到这个文件里

2)去注释

3)条件编译

通过条件编译,可以实现代码的动态裁剪

有很多软件,都是同一款软件,但是功能却有差别,有的收费的,有的是免费的

例如:vs、xshell等。

4)宏替

用gcc对文件进行预处理

gcc -E 文件名(.c文件)
从现在开始,帮我进行程序的翻译,等预处理做完你就停下来,别往后继续走了

[BCH@ALY 9_10]$ gcc -E code.c -o code.i//-o 文件名(一般是.i文件,如果是.i文件gcc还可以继续处理,如果不是gcc就不能处理了) 是为了预处理后的代码放到文件中,不然会直接显示到屏幕,不容易观测
​​​​​​​编译

把c语言转成汇编

* 编译过程为 扫描程序-->语法分析-->语义分析-->源代码优化-->代码生成器-->目标代码优化;

* 扫描程序进行词法分析,从左向右,从上往下扫描源程序字符,识别出各个单词,确定单词类型

* 语法分析是根据语法规则,将输入的语句构建出分析树,或者语法树,也就是我们答案中提到的分析树parse tree或者语法树syntax tree

* 语义分析是根据上下文分析函数返回值类型是否对应这种语义检测,可以理解语法分析就是描述一个句子主宾谓是否符合规则,而语义用于检测句子的意思是否是正确的

* 目标代码生成指的是,把中间代码变换成为特定机器上的低级语言代码。

* 死代码删除是编译最优化技术,指的是移除根本执行不到的代码,或者对程序运行结果没有影响的代码,而并不是删除被注释的代码

用gcc对文件进行编译

gcc -S 文件名(.c文件可以,只是再次进行了预处理。.i文件,编译就不用再预处理,直接转汇编)
从现在开始,帮我进行程序的翻译,等编译做完你就停下来,别往后继续走了

[BCH@ALY 9_10]$ gcc -S code.i -o code.s//-o 文件名(一般是.s文件,如果是.s文件gcc还可以继续处理,如果不是gcc就不能处理了),如果不写-o 文件名,会自动生成.s文件
汇编

把汇编转成可重定位二进制文件

用gcc对文件进行汇编

gcc -c 文件名(.c文件可以,.i文件可以,.s文件可以)
从现在开始,帮我进行程序的翻译,等汇编做完你就停下来,别往后继续走了

[BCH@ALY 9_10]$ gcc -c code.s -o code.o//-o 文件名(一般是.o文件,如果是.o文件gcc还可以继续处理,如果不是gcc就不能处理了),如果不写-o 文件名,会自动生成.o文件

注意:.o文件虽然是二进制文件,但是还是不能执行

链接

形成可执行程序

用gcc对文件进行链接

gcc 文件名(.c文件可以,.i文件可以,.s文件可以,.o文件可以)
这样就可以生成可执行程序

[BCH@ALY 9_10]$ gcc code.o -o mycode//-o 文件名,如果不写-o 文件名,会自动统一生成名字为a.out的可执行程序

我们编译文件常用

gcc .c文件 -o 文件名

  🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸 


网站公告

今日签到

点亮在社区的每一天
去签到