厦门手机网站建设公司哪家好,淄博网站排名seo,长沙哪里做网站价格便宜,网站备案上传照片几寸前言#xff1a;大佬写博客给别人看#xff0c;菜鸟写博客给自己看#xff0c;我是菜鸟。 1、vim操作#xff1a;
默认打开vim时#xff0c;vim处于命令模式。(在其他模式中#xff0c;Esc就能够返回命令模式) 常用的命令有#xff1a; n gg#xff1a;跳转到n行大佬写博客给别人看菜鸟写博客给自己看我是菜鸟。 1、vim操作
默认打开vim时vim处于命令模式。(在其他模式中Esc就能够返回命令模式) 常用的命令有 n gg跳转到n行没有n就跳转到首行 n shift g跳转到n行没有n就跳转到末行 shift4光标定位到行尾 shift6光标定位到行首 yy复制当前行 np粘贴到下n行没有n就粘贴以行 ndd剪切or删除下n行没有n就剪切一行 shift~大小写快速切换 nr小范围文本替换n个文本全部替换为统一字符 shiftr进入替换模式替换模式是一个新的模式可以Esc退出到命令模式 u撤销命令相当于 ctrlz ctrlu对撤销命令进行撤销 shiftzz保存并退出vim crtr v -hjkl - shift i - // - Esc 批量化注释 ctrl v -hjkl - d 批量化去注释 早期的键盘没有上下左右因此在命令模式下: h - 向左 l - 向右 j - 向下 k - 向上 shift ; - 进入底行模式 w - 保存 q - 退出 set nu - 显示每一行行号 2 、gcc/g gcc 只用来编译C g 能够编译C和C 代码从 .c 到执行的过程 Ⅰ预处理(进行宏替换、去注释、条件编译、头文件展开) 对应指令gcc -E test.c -o test.i 文件后缀 .c → .i Ⅱ编译(生成汇编) 对应指令gcc -S test.i -o test.s 文件后缀 .i → .s Ⅲ汇编(生成机器可以识别的代码) 对应指令gcc -c test.s -o test.o 文件后缀 .s → .o Ⅳ链接(生成可执行文件或库文件) .o 文件与库文件进行链接 - 可执行程序 补足一些这方面的常识 问为什么要进行编译为什么要汇编为什么不跳过这些步骤让代码直接变成可执行程序 答因为从历史的角度出发先有二进制编程再有编译器再有汇编语言再到C/C这样的其他语言我们站在巨人的肩膀上企业家为了节省语言的开发成本因此需要遵循前人的步伐。 问什么是编译器自举 答前面提到从历史角度出发先有二进制编程再有汇编为了能够让二进制代码变成汇编代码需要二进制编译器进行转换通过二进制编译器编译汇编语言所写的软件。随着技术的发展后来就用汇编语言所写的编译器来编译汇编语言所写的软件这一过程就称之为编译器自举 3、动静态库和动静态链接
1.动静态库 Linux环境下 动态库为 → libXXX.so XXX为库的名称 静态库为 → libXXX.a Windows环境下 动态库为 → xxx.dll XXX为库的名称 静态库为 → xxx.lib 2.动静态链接 Linux环境下 动态链接指令gcc test.o -o mytest (将二进制代码 test.o 转化为可执行程序 mytest) 静态链接指令gcc test.o -o mytest -static 动态链接和静态链接的区别 动态链接会将库的地址拷贝到内存中编译器(连接器)会通过寻址的方式将可执行程 序与动态库链接起来动态库不在内存当中。动态库不能丢失一旦丢失所有依赖动态库的程序都会出错。 静态链接会将库方法直接拷贝到可执行程序当中 4、自动化构建-make/Makefile make/Makefile 是什么 make 指令 Makefile 文件 make/Makefile 的核心思想 通过依赖关系和依赖方法形成目标文件 make/Makefile 具体语法 假设现有文件 code.c以及Makefile Makefile内部语法如下图所示 注 ①code.c 与 mycode 建立依赖关系而 gcc code.c -o mycode 为依赖方法通过该串指令生成 code.c 代码的可执行程序 ②.PHONY→伪目标clean能够被多次执行但同样的code.c只能被执行一次 ③只有当我们对code.c文件进行修改时make会对比源文件和可执行文件的修改时间若前后时间被修改过那么能够再次执行make (时间一共有三个对比的Modify时间) make/Makefile执行过程 倘若目录里没有code.oMakefile会将该方法入栈并去寻找code.o依赖谁直至找到当前目录中存在的依赖关系为止并执行依赖方法。然后再执行栈中的依赖方法并出栈直至完成所有依赖方法 make/Makefile 更加通用的语法 前五行可以视为C中的宏定义$(宏定义) 即可使用 $(shell ls *.c) 取当前目录中所有 .c 后缀的文件 还有一种表示方法为:$(wildcard *.c) (SRC:.c.o)将当前目录中所有 .c 后缀的文件转为 .o 后缀的文件 去回响Makefile 每当执行一个依赖方法时都会把依赖方法打印出来加了就不会打印 $^ - 依赖对象(OBJ) $ - 被依赖对象(BIN) %.c - 匹配任意以 .c 结尾的文件 $ - 将所有.c 结尾的文件一个一个的转换成 .o 结尾的文件