vim编辑器的使用
常用命令
- esc 进入命令模式
- i 光标前面插入字符 shift+i 本行首
- a 光标后面插入字符 shift+a 本行尾
- o 下一行插入 shift+o 上一行插入
- x 删除光标处的字符
- dd 删除光标那一行字符
- :w 保存
- :q 退出
- :e 不保存,恢复到上个版本
- :sp max.c 打开多个文件
- :set nu 打开行号
- 9 dd 剪切当前位置开始的9行 9yy复制
- p 粘贴
- :wqa 保存所有
- ctrl+w+方向键 移动光标位置
在用vim打开一个文件时,会产生一个cmd.swap文件,用于保存数据:
- 当编辑中的文件非正常关闭时,可用此.swp文件来恢复(非正常关闭时,不会被删除,所以提示存在.swap文件);
- 当编辑文件正常关闭时,此.swp文件会被删除;恢复非正常关闭的文件: vim -r 文件名:恢复后把.swp文件删除,再次打开时就不会再次提醒了;直接删除.swp文件,然后再次打开时也不会提示消息了;
c语言程序的编译
gcc hello.c max.c -o main.out 编译并指定输出文件名
#include"max.c" 相当于直接插入 不用一起编译了
gcc -c max.c -o max.o 生成.o文件
max.h里面只用声明函数
gcc max.o hello.c时,编译器比较智能,能找到max.o中有个max函数 但是会警告
如果在max.h里面有声明,并且main函数里面#include"max.h"后,编译不会警告
Makefile编写
#注释
hello.out:max.o hello.c #依赖哪些文件
gcc max.o hello.c -o hello.out #如何编译
max.o:max.c
gcc -c max.c
gcc前面加一个tab 不能用空格 会报错
main函数中的return
gcc main.c -o main.out && ./main.out 如果第一条指令成功执行 (返回码为0)则执行第二条
echo $? 查看上次执行程序的返回码
main函数中的参数
int main(int argc, char*argv[])
argc 参数的个数 默认为1 就是./xxx 这串参数
argv 存放的参数
stdin stdout stdrr
输入0 输出1 错误2
./a.out 1>> a.txt输出重定向到文件
ls /etc >> etc.txt
ls /etc > etc.txt 单箭头覆盖 双箭头添加到结尾
./a.out 1>t.txt 2>f.txt 0<input.txt
gdb调试
gcc -g main.c -o main.out 这样才能用gdb调试
gdb ./main.out 进入调剂模式
l 显示代码
break 12 在12打断点
start 开始调试
p a 显示a的值
n 执行下一行
s(step) 进入函数
bt 查看函数堆栈
f 1 切换堆栈
q 退出调试模式
x/3d 地址 连续显示三个整数