【问题标题】:link list node in C, struct prototypeC中的链接列表节点,结构原型
【发布时间】:2012-05-01 15:59:14
【问题描述】:

我在做一个嵌入式系统,我需要实现一个链表。

所以我用了一个struct来构造一个节点

typedef struct A
{
   ... //some data
   struct A *next;
   struct A *prev;
} A;

我认为在 PC (gcc) 上可以正常工作。但是,嵌入式系统编译器抱怨“未声明标识符 A”...

对此最好的解决方案是什么?

【问题讨论】:

  • 出于好奇,您使用的是哪个嵌入式编译器?

标签: c struct linked-list


【解决方案1】:

你可以拆分出来:

typedef struct A A;

struct A {
   ... //some data
   struct A *next;
   struct A *prev;
};

【讨论】:

    【解决方案2】:

    你应该为结构添加一个单独的前向声明

    struct A;
    typedef struct A
    {
        ... //some data
        struct A *next;
        struct A *prev;
    } A;
    

    有些编译器确实采用您发布的方式定义,但我见过需要单独前向声明的旧编译器。这可能与较旧的标准或不完整的标准实施有关。事实上,在一个项目中,我们需要编写在具有不同编译器的五个平台上运行的代码,我们将前向声明与结构的 typedef 分开作为公司范围内的编码标准要求。

    【讨论】:

    • 非常感谢!它有效,这正是我所追求的
    【解决方案3】:

    原始代码应该可以正常编译。您可能正在使用非标准编译器。作为其他建议的替代方案,您可以尝试以下代码:

    typedef struct a
    {
       ... //some data
       struct a *next;
       struct a *prev;
    } A;
    

    这样,您不需要前向声明。

    【讨论】:

    • 哦,顺便说一句,如果您在 C++ 编译器中编译原始代码,它将无法工作。 C++ 处理与 C 不同的结构命名空间。
    猜你喜欢
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多