vim指令
以下全是在命令行模式下按shift:然后输入
1.?名字 查找
2.s/i/j 将i替换为j,只替换第一个
s/i/j/g 将光标所在行整行的i替换为j
s/i/j/gc 自己可选择将哪个i换为j
8,9 s/i/j/g 将第八至第九行的替换
%s/i/j/g 全文替换
3.!ls 查看当前目录的文件
w 文件1 另存为文件1
3,12 w 文件1 把3至12行另存为文件1
4.r 文件1 把文件1读到当前文件
5.n 2.c 跳到2.c文件
6.sp 3.c 分屏显示
分屏显示后光标无法在上下两屏之间移动,要到etc目录下的vimrc文件中加上set mouse =a,就可以使用鼠标在上下屏幕之间移动光标了
编译器编译过程(预处理,编译,汇编,链接)
.预处理-E(头文件展开,宏替换,条件编译,不做语法检查)
以#号开头的代码在预处理阶段解决,经过预处理的文件是.i格式
gcc -E 文件1 只进行到预处理阶段就停止
gcc -E hello.c > hello.i 原本输出到终端,现在重定向输出到hello.c
2.编译-c(语法检查,生成.o目标文件)
gcc -c 文件1 到编译阶段停止生成.o文件,称为目标文件。
3. 汇编-S(生成汇编文件)
Gcc -s 文件1 到编译阶段停止,生成.s汇编文件
4. 链接-o(重命名可执行文件)
链接过程生成可执行文件,由汇编程序生成的目标文件并不能立即就被执行,其中可能还有许多没有解决的问题。例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。所有的这些问题,都需要经链接程序的处理方能得以解决。
链接程序的主要工作就是将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。
1.time ./文件1 测试文件运行需要多少时间
2.gcc -O1 hello.c - hello 一级优化运算
3.gcc -w hello.c 关掉编译警报(不推荐使用)
4.gcc -Wall hello.c 打开所有警报(推荐使用)
5.gcc hello.c -o hello -D max=100 在文件外部定义一个宏
6.gcc main.c add.c 如果main.c引用了add.c源文件,就这样编译
7.gcc -o main -I 目录1 指定头文件的第三方搜索目录
动态库和静态库
二者的不同点在于代码被载入的时刻不同。
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
动态库的代码是,在编译过程中仅简单的引用,因此代码体积较小。
静态库特点(.a文件):编译速度慢,执行速度快,不过可执行文件太过臃肿执行中占用内存大,因为是提前载入,所以不易升级,可也因为提前载入所以代码布局比较好
动态库特点(.so文件):编译速度快,执行速度慢,可执行文件体积小执行中占用内存小,因为是在可执行程序运行时才载入内存的,所以容易升级,可也因此布局较差
建立静态库步骤:
1.建立main.c普通文件和add.c函数文件;
2.gcc -c add.c 生成add.o文件
3.ar rcs libadd.a add.o 在/usr/lib 程序库生成add库文件
4.gcc main.c -ladd -L. -o main -L.指定库搜索路径 ,“.”为当前目录
5../main 运行
建立动态库:
1.gcc -shared -fPIC -o libadd1.so add.c
2.gcc main.c libadd1.so的绝对路径 -o add
3../add运行