C语言中的链接列表节点,结构原型



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

所以我用一个结构体来构造一个节点

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

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

最好的解决方案是什么?

您应该添加结构的单独前向声明

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

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

你可以把它拆分出来:

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

原始代码应该可以很好地编译。您可能使用的是非标准编译器。作为其他建议的替代方法,您可以尝试以下代码:

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

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

相关内容

  • 没有找到相关文章

最新更新