我正在开发一个嵌入式系统,我需要实现一个链表。
所以我使用了一个结构来构造一个节点
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
我认为在 PC (gcc) 上可以正常工作。但是,嵌入式系统编译器抱怨“未声明标识符 A”......
什么是最好的解决方案?
我正在开发一个嵌入式系统,我需要实现一个链表。
所以我使用了一个结构来构造一个节点
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;
这样,您就不需要前向声明。