一.vim编辑器

1.什么是vim

  • vim是一个专注的编译器,支持多模式编写(5种常见,3种核心)
  • 3种核心:命令模式(默认模式)、底行模式、插入模式等
    · 命令模式:移动光标、复制粘贴等
    · 底行模式:保存、退出、查找、替换等
    · 编辑模式:输入文本

2.切换模式

  • 命令模式 --> 插入模式:i、a、o
  • 命令模式 --> 底行模式:" : "
  • 回到命令模式:Esc

3.命令模式

  • gg:光标定位到最开始 G:最结尾
  • n+gg:定位到n行
  • $:定位到行尾 ^:定位到行首
  • hjkl:左下上右
  • yy:复制当前行 nyy:复制n行
  • dd:剪切当前行 ndd:剪切n行 x:删除字符
  • p:复制 np:复制n次
  • u:撤销 ctrl+r:反撤销
  • shift+zz:直接退出

4.底行模式

  • w:保存 q:退出
  • xx+!:强制执行xx操作
  • set nu:设置行号
  • /xxx:搜索xxx,n跳转下一个
  • !+command:不退出vim执行command
  • vs+文件:分屏给下一个文件
  • ctrl+ww:光标移动到下一个终端

5.视图模式

  • 注释:ctrl+v+j/k/l/h(选中行)+shift+i(进入插入模式)+ // +Esc(批量注释)
  • 去注释:ctrl+v+j/k/l/h(选中行)+shift+i(进入插入模式)+ // +Esc(批量注释)

二.gcc/g++(Linux下最常用的编译器)

1.gcc编译C语言,g++编译C++

2.编译过程

C/C++代码从源码到可执行文件通常经历四个阶段:

  • 预处理:展开头文件、宏替换、条件编译等
    gcc -E code.c -o code.i
    -E:开始程序的翻译,预处理结束就停下
    -o:写入到xx文件
  • 编译:检查语法错误,将预处理后的文件转换为汇编代码
    gcc -S code.i -o code.s
    -S:开始程序翻译,形成汇编代码就停下
  • 汇编:将汇编代码转换为机器码
    gcc -c code.s -o code.o
    -c:生成机器可识别的二进制(可重定位目标二进制文件,无法执行)
  • 链接:.o文件与库文件链接,生成可执行文件
    gcc code.o -o code

链接是在做什么:解决符号引用,将多个目标文件和库函数合并。
链接方式:静态链接:将库代码直接复制到可执行文件中,文件大但独立性强(- static静态链接)
动态链接:运行时加载库,文件小但依赖系统库(默认是动态链接)

3.库的管理

  • 动态库和静态库的生成:
    · 动态库生成:通常使用 ar 命令打包 .o 文件。
    · 静态库生成:需要加 -fPIC 和 -shared 选项。
  • 动态库与静态库的使用:
    · 程序生成时库的链接搜索路径:编译器去哪里找库文件。
    · 程序运行时库的加载搜索路径:操作系统运行时去哪里加载库文件(如/lib,/usr/lib,/etc/ld.so.sonf等)

4.gcc常见选项

  • -static:强制静态链接
  • -fPIC:生成位置无关代码(用于动态库)
  • -shared:生成动态库
  • -I(大写):指定头文件的搜索路径
  • -l(小写):指定连接的库名称
  • -L:指定链接时库文件的搜索路径
  • -g:生成调试信息,供gdb使用

三.gdb纯命令行调试器(GNU调试器,用于调试C/C++程序)

1.功能

  • 用于查看程序运行时的状态,定位bug,Linux下无法直接调试,因为gcc/g++默认为release模式。

2.程序调试的前提

  • 编译时必须加上 -g选项(g++ -g),为可执行程序加上调试信息,进入debug模式。

3.gdb加载程序

  • gdb 可执行文件:进入调试

4.常用调试命令

  • 开始调试:
    run(r):运行程序
    run+参数:带参数运行程序
    start:单步执行,停在main函数第一行
  • 逐行调试:
    n(next):逐过程
    s(step):逐语句
    finish:执行完当前函数
    until:跳转到指定行
  • 断点调试
    b(break):设置断点
    i(info)b:查看断点信息
    d(delete):删除断点
    watch:监视变量/表达式的值,如果改变,程序暂停执行
  • 函数调用栈追踪:
    bt(backtrace):查看函数调用堆栈,分析崩溃位置

四.make(自动化构建工具)

1.为什么使用make

手动编译每次都要重新敲命令,若项目很大,会很麻烦。make通过智能对比文件的“时间戳”,重新编译那些修改过的文件。

2.编写规则:

  • mytest(目标文件):test.c(依赖文件)
    gcc test.c -o mytest(生成目标文件需要执行的shell命令,缩进必须使用tab,不能用空格)

3.时间戳(文件ACM时间)

  • Access:最近访问时间(不会次次更新,减少IO压力)
  • Modify:修改文件内容
  • Change:修改文件属性
  • touch + 文件:更新ACM时间

4.伪命令

  • 声明clean只是一个动作,不是命令,每次都执行
  • .PHONY:clean
    clean:
    rm -rf mytest

5.自动变量

  • $@:当前规则的目标文件
  • $^:当前规则的所有依赖文件
  • $<:当前规则的第一个依赖文件

五.git(版本控制器)

1.简介

  • git用于管理代码的历史版本,本身是一个开源的命令行工具。
  • GitHub是基于git的国际化代码托管平台,生态更庞大;gitee是本土化的。

2.核心命令

  • git clone XX:从远程克隆一个开源项目
  • git add 文件名(.):把文件(所有)放入暂存区
  • git commit -m “消息”:把暂存区内容提交到本地仓库,并附带日志信息
  • git push:把本地仓库的提交推送到远程仓库
  • git status:查看当前文件的状态
  • git log:查看日志
  • git pull:更新本地(远端永远是最新的)

3. .gitignore

  • git的黑名单,在.gitignore里的文件,不会被纳入版本控制
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐