枚举:
自定义头文件:
1.头文件内容
2.“”和<>的区别
“”:编译器从用户的工作路径开始搜索头文件
<>: 编译器从标准库路径开始搜索头文件
3.条件编译
gcc工作原理
预处理,编译,汇编,连接
第一种方式:将四步合四为一
gcc stu.c -o stu
第二种方式:
预处理
$gcc -E stu.c -o stu.i
编译
$ gcc -S stu.i -o stu.s
汇编
$gcc -c stu.s -o stu.o
链接
多文件编译原理:
stu.c gcc -c stu.c -o stu.o
sio.c gcc -c sio.c -o sio.o
cal.c gcc -c cal.c -o cal.o gcc stu.o sio.o cal.o swap.o sort.o -o stu
swap.c gcc -c swap.c -o swap.o
sort.c gcc -c sort.c -o sort.o
make工程管理器
执行make之后,在当前路径下查找一个叫makefile/Makefile文件,执行该文件中的内容
Makefile文件
Makefile基本原则:
目标文件:依赖文件
(Tab键)通过什么规则依赖文件生成了目标文件
makefile假目标:
makefile变量
预定义变量
cc c编译器的名称,默认为cc
自定义变量
自动变量
$@ 表示目标文件
$^ 表示所有的依赖文件
$< 表示第一个依赖文件
变量定义的两种方式
递归展开方式VAR=var
简单方式 VAR:=var
变量
全局变量:定义在函数体外部的变量称为叫全局变量,
作用域:自定义开始,到文件结束 (文件作用域)
局部变量:定义在函数体内部的变量称为叫局部变量
作用域:自定义开始,到最近的}结束
extern
extern 修饰全局变量,扩大全局变量的作用域,引入外部文件的变量
extern 修饰函数 ,引入外部文件的函数
static
static+修饰全局变量
static+修饰函数
表示隐藏,表示只能在本文件中使用该变量和该函数,其他文件不能使用
static+局部变量:延长生命周期
全局变量和静态变量,内存在程序编译的时候就已经分配好了,这块内存在程序的整个运行期间都存在
共同体:
定义一个共同体数据类型
union 共用体名{
属性1;
属性2;
属性3:
};
共用体中所有的首地址是一致的