背景
网上多文件的变量共享、函数调用繁杂,一个很清楚的问题整的很乱,特此写博客提供参考(无需extern)。
环境
win10+CLion
习惯用IDEA、Pycharm的你肯定会习惯于CLion这头狮子
实验步骤
- CLion新建工程,选择无中文的路径,否则报错无法编译
- 将待拆分的C文件代码拷贝到main.c(自动生成的文件)
- 首先对main.c进行函数extract(若已提取则跳过)
- 按照函数的功能分类,规划分为几个模块文件
- 多文件调用、共享变量和函数。
第5步详解
将规划的模块新建一个.c/.h
将函数复制到.c中,在.h中include .c,否则找不到函数体,在.h中声明函数,否则main.c包含了.h后仍需声明一次函数
include .h是自动添加的,个人感觉没必要
在.h中对.c的函数进行声明
在主函数中include,注意主函数中定义的变量为共享变量(即共享变量放到main.c中;当然也可单独放到一个模块的.c中,在.h中声明extern TYPE VAR_NAME; 在main.c中引用即可,具体见下示例),需要放到include 自定义.h的前面,否则报错未定义。main.c的宏定义同样需要放到include 自定义.h的前面,否则报错未定义。
- 变量模块举例:
重定义的结构体无需extern,因为不是定义变量(这里不用extern好像也可以编译通过)
因为后面函数均使用了SIZE,所以需要放到用户自定义文件之上:
总结
按照原则“include就是复制文件内容到本文件”,理解为什么这么写.c 和 .h文件,以及main.c如何调用。