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

标签 c header constants

我想在单个静态 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/

相关文章:

c# - 请求后 WebClient 中的 header 消失

c++ - const 是否适用于传递给函数的所有参数?

c - Delphi 和 C 中的 RC4?

c - 返回 char 指针的最佳方法是什么?

javascript - 在 C++ 应用程序中编译嵌入式 spidermonkey javascript 引擎

python - 使用Python中的文件中的位数组读取带有 header 的二进制文件

c - 为什么我无法将十六进制值分配给 foo* const array[]?

C函数貌似没有在任何地方定义!

c++ - 在 C++ 中,为什么我们在重载函数中将引用参数声明为 const?

c++ - 常量和其他动物