今天主要学习了编译器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;
}
运行结果如下:
(2)#if 0 …#else或#endif :省略号内的内容都被条件编译了。
5. 交叉编译
交叉编译:在宿主机下编程出在目标机下运行的代码的过程。简单说是,在当前CPU平台下编译出在其他CPU平台运行的代码的过程。
交叉编译是在一个平台上生成另一个平台上的可执行代码。同一个体系结构可以运行不同的操作系统;同样,同一个操作系统也可以在不同的体系结构上运行。