我正在开发一个嵌入式系统,我需要实现一个链表。
所以我用一个结构体来构造一个节点
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;
这样,您就不需要前向声明。