Linux第六章

embedded/2024/9/23 14:35:56/

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

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

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

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

目录

linux%E5%BC%80%E5%8F%91%E8%BD%AF%E4%BB%B6-toc" style="margin-left:0px;">linux开发软件

vim

模式

模式切换

命令模式

底行模式

插入模式

vim创建文件

vim多文件编辑

vim的配置

添加可信任用户

g++/gcc

程序的翻译的过程

预处理

​​​​​​​编译

汇编

链接


linux%E5%BC%80%E5%8F%91%E8%BD%AF%E4%BB%B6">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/sudoers2)找到
## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALLBCH     ALL=(ALL)       ALL添加自己账户名格式和上面一样
例如:
账户名     ALL=(ALL)       ALL3)在底行模式下一定要写入保存,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 文件名

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


http://www.ppmy.cn/embedded/25566.html

相关文章

从Grafana支持的认证方式分析比较IAM产品现状与未来展望

调研报告 标题:从Grafana支持的认证方式分析比较IAM产品现状与未来展望 概述 本报告首先概述了评价IAM(Identity and Access Management)产品的主要因素,并基于Grafana支持的认证方式,引出对IAM产品的深入探讨。通过…

Swin Transformer—— 基于Transformer的图像识别模型

概述 Swin Transformer是微软研究院于2021年在ICCV上发表的一篇论文,因其在多个视觉任务中的出色表现而被评为当时的最佳论文。它引入了移动窗口的概念,提出了一种层级式的Vision Transformer,将Shifted Windows(移动窗口&#x…

浅谈测试用例设计

前言 最近干的最多的事情就是设计测试用例、评审测试用例了,于是我不禁又想到了一个经典的问题:如何设计出优秀的测试用例? 可能有些童鞋看到这个问题会有些不以为然,这有什么好想的?干个测试谁还不会设计测试用例&a…

线性结构与树形结构的区别

线性结构与树形结构在数据组织和关系表达上存在显著的差异。 线性结构是一个有序的数据元素的集合,其中的每个数据元素都有且仅有一个直接前驱和一个直接后继(除了第一个元素没有前驱,最后一个元素没有后继)。这种一对一的关系使得…

iOS实现一个高性能的跑马灯

效果图 该跑马灯完全通过CATextLayer 实现,轻量级,并且通过 系统的位移动画实现滚动效果,避免了使用displaylink造成的性能瓶颈,使用系统动画,系统自动做了很多性能优化,实现更好的性能,并使用…

在 GitHub 中掌握键盘快捷键的简短指南

你是否知道 GitHub 几乎每页都有键盘快捷键?这篇文章将带你探索 GitHub 的键盘快捷键世界,以及它们如何帮助你快速导航和执行操作。 读完这篇,你将能够: 掌握快捷键:想知道如何访问这些快捷键?在任何 Git…

释放Stable Diffusion 无限可能

最近在整理大语言模型的系列内容,Stable Diffusion 是我下一篇博客的主题。关注 Stable Diffusion,是因为它是目前最受欢迎和影响力最大的多模态生成模型之一。Stable Diffusion 于 2022 年 8 月发布,主要用于根据文本的描述产生详细图像&…

函数栈帧的创建和销毁

目录 1.关于寄存器你应该知道的 2.函数栈帧的初步理解 3.简单的了解反汇编 4.函数调用的传参过程 5.函数返回值到底是如何返回的 6.总结回答开始的问题 1.局部变量是怎么创建的? 2.为什么局部变量不进行初始化就会是随机值? 3.函数如何传参和传参…