gpt4 book ai didi

c - 由多个文件使用的 C 中的数据存储

转载 作者:行者123 更新时间:2023-12-04 04:50:50 24 4
gpt4 key购买 nike

我有一个庞大的 type-def 数组,我希望它可以跨多个 c 文件访问。 type-def 的定义在头文件中。共享数据的最佳方法是什么.. 我应该将它存储在头文件中还是在 c 文件中?

方法一

project.h
---------
typedef struct td_myproject{
lot of fields ....
} td_myproject;

projectdata.h
-------------
include "project.h"

td_myproject myproject[] = {
over 100k of recs with data filled before compilation
}

myproject.c
-----------
include "project.h"
include "projectdata.h"
(with proper guard usage)

print(%s",myproject[0].field1);

方法二
project.h
---------
typedef struct td_myproject{
lot of fields ....
} td_myproject;

projectdata.c
-------------
include "project.h"

td_myproject myproject[] = {
over 100k of recs with data filled before compilation
}

myproject.c
-----------
include "project.h"
(with proper guard usage)

print(%s",myproject[0].field1);

最佳答案

就个人而言,这确实是个人选择,我会将数据 ( myproject[] ) 存储在自己的 C 文件中。

为什么?

因为从概念上讲,头文件应该用于常量(用于编译,而不是存储)和定义。

另一方面,代码文件由数据和代码组成。最终代码文件编译成目标文件,然后链接器连接这些目标文件之间的引用。代码和数据都是被引用的项目——逻辑上——如果你的数据在一个 C 文件中,然后成为一个目标文件,它将被另一个目标文件(来自一个 C 文件)引用。

对我来说,是否可以进入头文件的测试是两个单独的 C 文件是否可以包含该文件并仍然链接。在这种情况下 - 如果将静态变量包含在两个不同的 C 文件中,则将静态变量放在头文件中会破坏链接。

那么如何最好地解决这个问题呢?

头文件 myproject.h :

include "project.h"

/* define variable type, and the fact it needs to be linked in */
extern td_myproject myproject[];

代码文件 myprojectdata.c :
#include "myproject.h"

/* actually define contents of variable in this unit */
td_myproject myproject[] = { ... };

这样做的好处是您可以引用 myproject[]从其他 C 文件中仅包含 myproject.h .

代码文件 myproject.c :
#include "myproject.h"

int main( void ) {
print("%s",myproject[0].field1);
}

链接:
gcc -o myproject myproject.c myprojectdata.c

关于c - 由多个文件使用的 C 中的数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17465292/

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