-
gcc 编译
编译过程
a. 预处理
gcc -E file.c -o file.i将头文件载入的该源文件中 删除代码中的所有注释 将所有的宏,进行原地替换 处理所有的条件语句 b. 编译 gcc -S file.i -o file.S 生成相应的汇编代码 c. 汇编 gcc -c file.S -o file.o 将汇编代码翻译成机器可识别的语言 d. 链接 gcc file.o -o file 链接动态库,生成可执行文件 综合: gcc file.c -o file gcc -o file file.c
-
多文件及其管理
头文件的包含:
<>: 系统头文件或标准库头文件
“”: 是用户自定义头文件提高查找效率
自定义多个头文件
head01.h —> head02.h
head02.h头文件:
标准库头文件
结构的定义申明
宏定义 -
预处理
如何防止头文件重复包含:宏定义:
#define 标识符 内容
#define LEN 5取消宏定义 #undef 标识符 #ifndef 标识符 ---> 如果标识符不存在,则执行以下代码 #endif #ifdef 标识符 ----> 如果标识符存在,则执行以下代码 #endif 防止头文件的重复包含: #ifndef __MY_HEAD__ #define __MY_HEAD__ //函数声明,结构声明...... #endif 其中: __MY_HEAD__: 一般为自定义头文件名称
-
makefile
(1)多文件管理
便于实际开发,提高开发效率
(2)makefile 文件的名称
Makefile
makefile
(3)makefile 的语法规则
# 开头的语句为注释内容
(4)常用标识符
$<:满足当前依赖关系的所有文件
$^:满足当前依赖关系的第一个文件
$@: 目标文件
(5)Makefile 中的变量
variable := value1
variable ?= value2 //立即变量
variable = value3 //延时变量
立即变量:在定义的时候,明确赋值的变量
延时变量:在使用的时候,确定其值
//向变量中添加新值
variable += value;
//引用变量的值
$(vaiable)
基本语法规则:
目标文件:依赖文件
<Tab键>规则
知识点补充:
(1)数组作为函数参数问题
数组作为函数参数时,自动降级为同类型的指针
即实参传数组首元素的地址或某个元素的地址
形参是与数组同类型的一个指针
(2)指针数组
每一个元素都是一个指针
(3)指针与字符串
char arr[8] = “China!”;
char *str = “China!!”;
//以下代码分别输出??? ---> 课后思考
arr[0] = 'a';
printf("arr = %s
", arr); //
str[0] = 'a';
printf("str = %s
", str); //
(4)二位数组的访问和简单使用
int arr[2][3] = {0}; //初始化同一维数组
int arr[3][3] = {1,2,3,4,5,6,7,8,9}; //OK
int buf[3][3] = {
{1,2,3},
{4,5,6},
{7,8,9}
}; //OK
访问二维数组:
arr[1][2] // 3
int arr[3][] = {1,2,3,4,5}; //Error
int arr[][3] = {1,2,3,4,5}; //OK
int arr[][] = {1,2,3,4,5}; //Error