gpt4 book ai didi

c - 如何解释没有定义的结构?

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

今天我开始研究 FUSE 开源代码,在那里我发现了几行这样的代码:

struct fuse_session;
struct fuse_chan;

我不知道如何解释它,据我所知,“struct”后跟结构名称,然后是变量名称。在这种情况下,只有一个命名实体后跟 struct ,所以这个融合 session 是结构变量或结构名称本身。它可能是一些非常基本的东西,但我无法在任何地方找到它.

最佳答案

这通常用于以下之一:

  1. 你想让某个模块的用户知道这个结构的存在,但又不想暴露它的内容。例如:

    在 api.h 中:

    struct bar;

    void GetStruct(struct bar *);
    void SetActive(struct bar *, char);

    在你的内部文件中:

    struct bar {
    char is_active;
    };

    void GetStruct(struct bar * st) {
    st = malloc(sizeof(struct bar));
    }

    void SetActive(struct bar * st, char active) {
    if (st != NULL)
    st->is_active = active;
    }

    通过这种方式,您可以封装实现,并可以在以后根据需要更改结构,而不会对使用的模块产生任何影响。

  2. 您想在声明结构(指针)之前使用它。例如:

    struct bar;
    typedef int (*FooFuncType)(struct bar *);
    struct bar {
    FooFuncType a_func;
    };

一个重要提示:

如果你只有结构声明,就像你的问题一样,你不能直接引用结构,也不能使用 sizeof 运算符,只能声明一个指向结构的指针。

关于c - 如何解释没有定义的结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8633436/

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