目录
- 一、多文件与编译器链接
- 二、多文件之间的相互访问
- 三、关于#include
- 四、头文件使用的一些原则
- 五、再论全局变量
- 六、注意事项
- 七、实验程序
- 八、小结
一、多文件与编译器链接
如下图所示,.o 为目标文件,链接器将不同的目标文件装配组合在一起形成一个可执行文件。
二、多文件之间的相互访问
每个文件可以定义功能接口(可被其它文件访问的函数或数据)
- 源文件:代码实现文件,后缀为.c
- 头文件:源文件的接口定义文件,后缀为.h
当需要使用其它文件提供的功能时,包含对应的头文件
语法:
#include <hearer.h>
#include "header.h"
三、关于#include
#include 用于声明使用其它文件的功能(头文件可看作工具包)
#include <...>
在编译系统文件中查找头文件
#include "..."
先查找当前工程文件夹,再查找编译统文件夹
四、头文件使用的一些原则
- 头文件中只做函数声明和变量声明(不做具体定义)
- 头文件中可定义数据类型(typedef, struct, union, enum)
- 根据具体实现,一个头文件可对应多个源文件(多数情况一对一)
- 不要使用#include语句包含源文件
五、再论全局变量
普通全局变量
- 源文件中定义的全局变量可在所有其它源文件中使用
- 可使用 extern 关键字在头文件中进行声明,并在其它文件使用
静态全局变量
- static 修饰的全局变量只能在当前源文件中使用
- 无法通过 extern 关键字声明,在其它文件使用
六、注意事项
函数声明语句默认自带 extern 关键字修饰
类型定义必须在头文件中,仅类型声明无法创建变量
静态全局变量
- 生命期为程序运行期
- 作用域仅在定义的文件中
- 无法直接在其它文件中使用
static 关键字可使函数具备文件作用域(静态函数)
静态函数无法在其它文件中被调用
函数设计时需要考虑是否在其它文件中使用
七、实验程序
以CodeBlcoks为例,先建好 main.c 文件之后,点击File,New,再点击File,选择 Empty file,分别建一个 .h 和 .c 文件,完成多文件创建。
opm.h 代码:
struct Test
{
int a;
int b;
};
extern int g_var; // 声明全局变量时,不需要给出初始值
extern int f_var;
int add(int a, int b);
int mul(int, int); // 进行函数声明的时候,可以省略参数名
extern void test();
opm.c 代码:
#include <stdio.h>
int g_var = 1;
static int f_var = 2; // 只能在当前文件中使用 ==> 静态全局变量
static void func() // 静态函数只能在当前文件中被调用
{
printf("void func() : f_var = %d\n", f_var);
}
void test() // 当前文件中定义的所有函数都可以调用 func() 函数
{
func();
}
int add(int a, int b)
{
return a + b;
}
int mul(int a, int b)
{
return a * b;
}
main.c 代码:
#include <stdio.h>
#include <string.h>
#include "opm.h"
int main()
{
struct Test t = {1, 2};
printf("a + b = %d\n", add(t.a, t.b));
printf("a * b = %d\n", mul(t.a, t.b));
printf("g_var = %d\n", g_var);
// printf("f_var = %d\n", f_var); // 无法直接使用其他文件中定义的静态全局变量
test();
return 0;
}
下面为输出结果:
通过这个多文件程序,说明一个问题:
static 修饰的全局变量和函数只能在当前源文件中使用,所以 func() 函数不能再 main 函数中调用,而 test() 函数可以在 main 函数中被调用。
八、小结
- 实际工程开发中,多文件程序设计是常态
- 源文件实现具体功能,头文件声明接口
- #include 用于声明需要使用其它文件中定义的功能
- extern关键字用于函数和全局变量的声明
- static 关键字修饰的全局变量不能在其它文件中使用
相关推荐:
ChatGPT不能加载过去的对话,如何提升你的使用体验?,ai智能衣服
SEO译为:网站排名背后的优化策略,会展中心网站优化
ChatGDP人工智能:未来科技赋能企业与个人的智能变革,如何用AI绘制人体
软件我在AI:改变未来的智能助手
SEO搜索关键词是什么意思?让你轻松网站流量的秘密!,ai颜色不对
互联网资源的无限潜力:如何利用数字世界为个人和企业创造价值,信阳网站建设正规公司
用AI修改文章,提升写作效率与质量的新时代
chatai写作免费一键生成,轻松解决写作难题!,陈逗逗ai换脸在线看
seo线索收集是什么,seo线索收集是什么意思 ,ai生活ai童童
ChatGPT与讯飞:AI语音与智能对话的完美融合,ai直角变圆角
SEO优化做什么的?揭秘SEO优化的核心价值与实战应用,ai做金色
什么是seo平台seo教程,什么是 seoseo有何价值 ,论文写作ai助手公众号
ChatGPT内部HTTP接口文档-为开发者提供高效便捷的AI服务接入方式,安屿ai
“收录量为1”,打造数字化时代的独特竞争力,网站建设页面制作流程
用AI批量下载工具,高效管理你的文件和资源
ChatGPT免登录:轻松畅聊,无需注册,快速体验AI智能助手,眼泪ai
SEO优化快:如何在短时间内实现网站流量爆发,Lacey0508ai
SEO怎么优化比较好?全面提升网站排名的实用技巧,高级ai玩家
SEO站在未来之巅,助力网站在激烈竞争中脱颖而出,推荐网站优化欢迎咨询
SEO门户:打造高效网站流量的关键利器,创意网站建设要求
SEO开发:数字营销的核心驱动力,园区网站建设
什么是seo快排,seo快排方案 ,ai剪图形
SEO优化如何提升网站排名,驾驭搜索引擎流量,三亚网站推广方法
ChatGPT-深度学习与自然语言处理的革命性突破,金华ai视觉锁螺丝机
seo简介主要写什么,seo主要内容 ,AI弧线这
SEO优化攻略:如何通过精准策略提升网站排名与流量,aI ow翻译
SEO优化引导新官网,助力企业迈向成功之路,宋轶ai换
什么是seo公司口碑,seo品牌 ,ai大模型训练是什么意思
SEO做好,企业网站流量翻倍的关键,seo白帽技术有哪些
AI生成文章免费工具,让创作变得轻松又高效,ai安心健
SEO主要是为网站引流吗?深入解析SEO的核心价值,AI算算
seo要学会什么,seo要学多长时间 ,NTU AI 录取
SEO招标:如何通过专业SEO服务助力企业脱颖而出,牡丹江关键词排名怎么样
SEO重要性与企业互联网发展的必由之路,互联网营销推广平台设计
文章创作AI:引领智能写作的新时代
企业如何借助SEO咨询实现精准流量引爆,助力业绩提升,立刻推广的旅游线下营销
优化,让生活与工作更高效-从个人到企业的全面升级,广州百度seo费用
好用的AI写作软件免费推荐:创作新境界!
SEO在线服务-让您的网站快速跃升至搜索引擎前列,江西小红书营销推广案例
SEO要好,网站流量翻倍的关键秘诀,品牌网站建设关键词优化
seo要会些什么,seo需要学些什么内容 ,轻盈ai
打造内容创作新时代:有言AI生成助力创作者释放灵感
线上AI写作免费一键生成,轻松提升写作效率,解放创作思维
ChatGPT进不去怎么办?解决方案与技巧,轻松畅享智能对话,ai va
AI助手不需要登陆-畅享便捷生活,随时随地高效工作,ai客服 对话
ChatGPT出现报错503?这些解决办法你必须知道!,粉墨ai说唱
ChatGPT的VPN梯子:畅享全球互联网自由,打破地域限制,一直搜Ai
seo需要什么人才,seo需要做什么工作 ,探索ai照片
SEO兼职:如何通过SEO兼职实现收入增长与职业突破,濮阳网站建设官网
SEO伪创:提升网站排名的危险策略与如何避免,怎样介绍社交网站推广