当一个结构在单独的文件中定义时,如何将它们嵌套到另一个结构中?

How to nest a struct into another struct when they're defined in separate files?

我已经搜索过这个问题的答案,但是很难找到任何东西,因为这个问题很难用词来表达。

假设我们有 file1.h 定义了一个结构:

//file1.h 

struct foo{
    int param1;
    ...
};

稍后我想将这个 foo 结构合并到另一个文件中定义的通用结构 bar 中:

//file2.h
#include "file1.h"

struct bar{
    struct foo foo1;
    int param
    ...
}

我希望它是相同的结构定义,这样我就不必修改具有相同参数的两个结构,并且我不想使用指针,因为我有一些序列化,比如在 bar 上运行的例程。另外,我希望 foo 在 file1.h 中定义,这样我就不必每次使用 file1 的函数时都在别处定义它。这可能吗,这甚至是个好主意吗?

(我正在尝试实现模块化,其中 file1.c 可以单独使用或直接绑定到 file2 中的代码中,而无需在所有地方重新定义结构)

这是很有可能的,到处都在使用。

//file2.h

#include "file1.h"

struct bar {
    struct foo foo;
    int param;
    ...
};

#include 指令告诉预处理器将 file1.h 的所有内容转储到 file2.h.

这就是你一直在做的事情。您键入 #include <stdio.h> 以获取 printfscanf 等函数的减法。这自然适用于结构、类型和其他东西。如果操作正确,您甚至可以共享变量。

您需要进行一些调整。

//file2.h

#include "file1.h" // <===================== include file here

struct bar {
    struct foo var_foo; // <================ fix syntax here
    int param
};

您将访问 struct bar 中嵌入的 struct foo 的字段,如下所示:

#include "file2.h"

int main() {
    struct bar var_bar;        
    var_bar.var_foo.param1 = 0;
}