静态 C 库中的选择性变量定义

selective variable definition in a static C library

我正在为基于 8051 微控制器的图形 LCD 创建一个 C 静态库文件 (.lib)。有一些功能和3种字体可以在编译前select编辑(只允许一种字体)。该库应包含一些不同的字体,例如:

#if defined FONT1
const uint8_t code font[size1] = { /* Font1 Data*/ }
#elif defined FONT2
const uint8_t code font[size2] = { /* Font2 Data*/ }
…

最终用户可以通过在给定的“.h”文件中定义一种所需的字体来select。当我测试时,不可能通过将上面的代码编写为库文件来做到这一点,只需使用一种显而易见的定义字体进行编译。另一方面,出于内存考虑,一次加载所有 3 种字体(在最终应用程序中)效率不高。 有正确的方法吗?

您可以将字体拆分到不同的源文件中。然后每个源文件将被构建到一个单独的目标文件中 (translation unit),如果您的链接器足够好,它将丢弃包含未使用符号的目标文件。

如果未使用的目标文件被丢弃,那么它们中的代码和数据当然不会成为最终链接的可执行文件的一部分。