gpt4 book ai didi

C 文字常量 : in header or C file?

转载 作者:太空狗 更新时间:2023-10-29 17:19:19 24 4
gpt4 key购买 nike

我想在单个静态 C 程序中包含一堆数据(例如,图像,还有其他数据,嵌入到可执行文件中,因为我在没有文件的嵌入式平台上工作)。

因此,我写了一些 img2c 从我的数据文件中创建 const 数据,创建一个带有静态 const 数组初始值设定项的文件以放入闪存(使用 C99 不错的功能)

我的问题是,我应该把它们放在 .h 文件中,就像我多次看到的那样 - 例如 gimp 可以保存为 .h 文件,而不是 .c 文件 - 或者放在 .c 文件中,在 a 中引用仅包含用于进一步引用的 const extern 声明的 header ,而无需包含所有数据并将其全部传递给编译器,并在每次使用时重新声明它?

预处理器宏是不可能的,因为我将引用它们的地址,而不是每次都包含整个数据。

最佳答案

如果您将数据放在 header 中,则每个拉入该 header 的编译单元都将获得自己的数据副本。想象两个 .c 文件,每个文件都转到一个 .o。每个 .o 都会有一份数据副本,您的最终可执行文件可能比需要的更大。

如果你把它放在一个 .c 中并在一个头文件中将它外部化,那么只有一个 .o 将包含数据并且你的最终可执行文件可以更小。此外,如果您更改内容,如果只是更改单个 .c 而不是包含 header 的所有 .c 文件,则重新编译会更快。

如您所述,您可能还会遇到链接器问题,因为符号将被多次定义,请参阅 Repeated Multiple Definition Errors from including same header in multiple cpps 的答案。 .将 extern 放在 header 中并将数据放在 .c 中会更好

关于C 文字常量 : in header or C file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11884019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com