我正在开发一个嵌入式系统,我需要实现一个链表。
所以我用一个结构来构造一个节点
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
我认为在PC(gcc)上这很好用。但是,嵌入式系统编译器抱怨“标识符A未声明”......
最佳解决方案是什么?
答案 0 :(得分:10)
您应该添加结构的单独转发声明:
struct A;
typedef struct A
{
... //some data
struct A *next;
struct A *prev;
} A;
有些编译器会按照您发布的方式对您的定义进行定义,但我看到较旧的编译器需要单独的前向声明。这可能与较旧的标准或不完整的标准实施有关。实际上,在我们需要编写在具有不同编译器的五个平台上运行的代码的项目中,我们将其作为公司范围的编码标准要求,以使前向声明与struct的typedef分开。
答案 1 :(得分:1)
你可以把它拆分出来:
typedef struct A A;
struct A {
... //some data
struct A *next;
struct A *prev;
};
答案 2 :(得分:0)
原始代码应该编译得很好。您可能正在使用非标准编译器。作为其他建议的替代方案,您可以尝试以下代码:
typedef struct a
{
... //some data
struct a *next;
struct a *prev;
} A;
这样,您就不需要转发声明。