首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微控制器的模块化编程

微控制器的模块化编程
EN

Stack Overflow用户
提问于 2013-01-29 21:11:33
回答 3查看 1.6K关注 0票数 0

我的工作是一个全面的长期C编程项目,将需要模块化编程方法。作为设计的一部分,将创建库,因此我想确认头文件组织的真假解释:

问题

假设您正在创建一个库。经过仔细考虑,您已经决定,您想要构想的最终库,又名“哥斯拉”,应该由两个绑定到头文件的单独C文件组成。在这个头文件中将存在函数声明;例如:

代码语言:javascript
复制
// offense.c
void attack_city(uint32_t force);    // (in Newtons) - capable of a LOT of force!
...

// measure.c
void measure_effect(void);
...

下面是您绘制的基本网络图:

因为force.cmeasure.c都包含godzilla.h,所以所有内容都将从这个头文件中引用并包含在编译过程中,对吗?

编辑

用途: ARM微处理器

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-30 12:56:36

头文件所做的就是告诉编译器哪些函数是可用的,它们应该如何调用(有多少类型的参数,以及返回值)。

是链接器(或者图书管理员,在创建库时,而不是创建可执行文件)带来了编译每个.c文件所产生的多个对象文件。因此,您需要告诉编译器(例如,在命令行上,通过IDE或Makefile)希望它编译的所有c文件。

票数 1
EN

Stack Overflow用户

发布于 2013-01-29 21:24:46

您应该熟悉链接的工作原理。

通常,在编译时,您使用一些未解析的引用创建对象文件,这些引用将由链接器解析,从而创建二进制文件。其中一些引用可以指向外部库,并且将被“未解决”,并将在运行时被解析。

头文件只为编译器提供函数的签名(不提供查找实际实现位置的信息),因此它将知道如何将参数传递给函数。如果函数未在同一个模块中定义,则链接器将需要找到它。我不知道你在使用哪种系统,所以我帮不了你。

一般来说,在开始编写C库之前,您应该非常好地理解这些概念,否则您将创建一个糟糕的库,它将在每一个小版本中改变ABI,并将有一个坏的业力。

票数 2
EN

Stack Overflow用户

发布于 2013-01-29 23:10:57

在头文件和..lib文件之间没有隐含的“绑定”。

为了创建一个库,您需要显式地告诉您想要放入哪些已编译的文件(..obj/.o),链接器将不管头文件头如何创建库。

如果不同的..obj文件共享数据或相互调用,则头在链接时会发挥作用,但这并不隐含。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14592367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档