尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

朝花夕拾 · C语言 | 多文件篇

朝花夕拾 · C语言 | 多文件篇 全局变量使用1.在源文件中定义全局变量2.如果只是在定义该全局变量的文件中使用该全局变量可以不声明3.如果要在一个外部的源文件中使用该全局变量则该变量必须被声明4.在对应的头文件中加extern关键字声明头文件中全局变量只能声明不能初始化定义应在.c文件在头文件的声明里函数默认为extern编译器会自动加上。预处理阶段只认#include预处理器看到#include ji.h把ji.h里的int get_ji(int num1, int num2);复制过来。看到#include shang.h把shang.h里的声明复制过来。此时main.c里只有“声明”知道有这两个函数但没有“定义”不知道这两个函数具体怎么算。编译 链接阶段关键区别如果只输入gcc main.c编译器会报错undefined reference to get_ji和undefined reference to get_shang。因为编译器只编译了main.c找不到get_ji和get_shang的具体代码定义。头文件只是“承诺”这些函数存在但真正的“兑现”需要靠链接器把对应的.c文件编译结果合并进来。Makefile:管理代码工程的编译和链接由make工具进行解释实现一键化工程的编译和链接。文件Makefile/makefile文件/脚本语法目标文件依赖文件编译规则目标文件a.out依赖文件(生成目标文件所依赖的源文件):main.c sum.c sub.c ......编译规则gcc main.c sub.c sum.c ( -o a.out)编译代码makeMakefile中的变量1.自定义变量OBJ a.out //定义Makefile的变量OBJ并为其赋值 SRC main.c sum.c sub.c SRC main.c SRC sum.c SRC sub.c CC gcc INCLUDE ../include //includexxx双引号里的内容只能在当前路径下访问所以使用-I指明头文件路径 LIBS ../lib $(OBJ) :$(SRC) //变量的引用$() $(CC) $(SRC) -o$ -I$(INCLUDE) -L$(LIBS) -lm //-o $(OBJ) 给自定义变量起名 //-I头文件路径 -L指定库的位置 //-lm链接数学库 a.out: main.c sum.c sub.c gcc main.c sub.c sum.c 自定义伪代码 clean rm $(OBJ) //表示clean实现移除文件功能 //用 make clean调用:给变量赋值在原变量值的基础上再增加新增?: 若变量之前没有被赋值则赋值若之前被赋过值则保留原值2.系统变量可直接使用$:表示目标文件$^ :表示所有依赖文件$:表示第一个依赖文件
返回列表