嵌入式技术笔记(三):编辑器vim和编译器gcc

今天主要学习了编译器vim和编译器gcc的相关知识。
1. 编辑器:vim
有三种模式:命令模式,底行模式,插入模式;默认是命令模式。
命令模式->插入模式:按i或a
插入模式->命令模式:按esc键
插入模式->底行模式:按esc键
命令模式->底行模式:按shift键和:
退出编辑器:进入底行模式,输入“q!”,按回车退出
编辑器中的一些命令:
(1)在命令模式下:
按“yy”复制整行语句;按“yy10”是复制整行语句10次;
按“p”自动往下复制一行;“yy”和“p”是配套使用的,如果按的是“yy10”,那么按“p”后会自动往下粘贴10行;
按“dd”删除整行语句;按“5dd”是删除从所在行往下,共5行(包括所在行);
按“u”撤回;
按shift键和“zz”:保存并退出。注意如果未编辑任何内容,则不会保存该文件,直接退出。
(2)在底行模式下:
s/要替换的内容/替换后的内容:只能替换第一个符合要求的内容;
s/要替换的内容/替换后的内容/g:替换整行符合要求的内容;
wq:保存并退出;
q!:强制退出;

还有vim中的其他命令,具体见Linux下vim命令详解

2. C语言运行的4个阶段
(1)预处理 : #开头的代码,如#include或#define,预处理后形成.i文件 。此阶段不检查语法错误,只进行头文件展开、宏替换、条件编译。
(2)编译:作用 1.语法检查 2. 把c程序翻译成汇编语言、生成汇编文件。
(3)汇编:把汇编语言翻译成二进制代码,形成. o文件。
(4)链接:链接所有目标文件,生成符号表,生成可执行文件。链接需要用到的代码c库。

#include <stdio.h> 与 #include “stdio.h"的区别在于搜索路径不同
<>:在系统头文件目录(/usr/include)搜索,若没有,就报错;
“”:现在当前目录查找,若没有,再到系统头文件目录查找,若没有,就报错;
规范:<>包含系统头文件,”"包含自定义头文件。

3. 如何用编译器gcc来编译显示这些文件?
gcc 原文件名 -o 重命名的文件名:可执行重命名,生成的文件是elf格式;
gcc -E hello. c -o hello. i:编译.c文件,把预处理后生成的. i文件放入当前目录(只进行预处理);
gcc -S hello. i -o hello. s:编译.i文件,把编译后生成的. s文件放入当前目录;
gcc -c hello.s -o hello. o:编译.s文件,把汇编后生成的. o文件放入当前目录;
gcc hello. o -o hello:编译.o文件,把. o文件编译后生成的可执行文件放入当前目录;
. /hello :执行hello文件,显示运行结果;
gcc hello. c:会产生a. out文件,执行a. out也能显示运行结果,仅限调试;
gcc -Wall hello.c:显示所有警告
gcc -I路径名:指定头文件的第三方搜索路径
gcc -O1/-O2/-O3:编译优化(优化选项)

4. 条件编译
条件编译是指让程序的某部分在满足一定情况下进行编译,或者在满足一定条件下不进行编译
关于条件编译的一些用法:
(1)#ifndef 的用法

  #include <stdio.h>
  
  #define MAX 100
  
  int main()
  {
      int num =MAX;
 
      #ifndef MAX
      printf("hi\n");
      #else
      printf("hello\n");
      #endif
      return 0;
  } 

#ifndef解释
运行结果如下:
运行结果

(2)#if 0 …#else或#endif :省略号内的内容都被条件编译了。
#if 0

5. 交叉编译
交叉编译:在宿主机下编程出在目标机下运行的代码的过程。简单说是,在当前CPU平台下编译出在其他CPU平台运行的代码的过程。
交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值