🐶博主主页:@ᰔᩚ. 一怀明月ꦿ
❤️🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++,linux
🔥座右铭:“不要等到什么都没有了,才下定决心去做”
🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀
目录
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 文件名
🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸