第一部分:编译
一、Vim编辑
- vim 下打开新文件: 命令 sp filename
- vim 下切换文件:组合键 ctrl + w + down
- vim下复制多行:组合键 number + yy
- vim 下粘贴:组合键 p
二、Gcc编译
1.手动编译
// -o 表示目标文件
gcc -c fn1.c fn2.c fn3.c main.c -o main.out
// 将写好的函数提前编译,将提高最后编译的效率
gcc -c fn1.o fn2.o fn.o main.c -o main.out
2.Makefile
在工作目录下新建一个名为Makefile
ormakefile
的文件
# this is makefile
2 hello.out:max.o min.o compare.c
3 gcc max.o min.o compare.c
4 max.o:max.c
5 gcc -c max.c
6 min.o:min.c
7 gcc -c min.c
保存后就可以用命令make
一键编译了!
第二部分:GDB调试
调试时建议保存源代码
// 需要调试的代码必须用-g再次编译
gcc -g main.c -o main.out
- 进入调试:gdb main.out
- 显示代码:list 或者 l
- 单步调试:start
- 打印变量:p 变量名 | p * 指针名(or内存地址)
- 打印地址:p &变量名
- 进入函数:s
- 执行下行:n
- 查看堆栈:bt
- 切换函数:f 编号
- 批量打印:x/n(要打印的变量数)d(十进制显示)b(步长为字节) 0xf…f(起始地址)
第三部分:Tips
一、返回值
- 主函数返回值:
- return 0 表示执行正常
- return 1 表示执行异常
- 终端下输入
echo $?
打印上次程序的返回值
二、命令行参数
int main(int argv, char*[] argc)
- argv 保存命令个数
- agrc 保存各个命令
三、三种流
- printf 和 scanf 的原理
// 向标准输出流输入
fprintf(stdout, "please input value a : \n");
// 向标准错误流输入
fprintf(stderr, "the value must > 0");
// 向标准输入流输入
fscanf(stdin, "%d", &a);
- 输出重定向
test.out 1>stdout.text 2>stderr.text < stdin.text