4

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

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

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

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

什么是最好的解决方案?

4

3 回答 3

10

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

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

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

于 2012-04-20T03:40:59.727 回答
1

您可以将其拆分:

typedef struct A A;

struct A {
   ... //some data
   struct A *next;
   struct A *prev;
};
于 2012-04-20T03:40:24.527 回答
0

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

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

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

于 2012-04-20T09:12:43.710 回答