如何在Arduino中进行结构的前向声明

How to make forward declaration of a struct in Arduino?

本文关键字:结构 声明 Arduino      更新时间:2023-10-16

想象一下这个高度人为的例子:(注意这是针对arduino风格的C,而不是ANSI C):

typedef struct _node {
  int value;
  struct _node *next;
} node;

使用这个,我可以通过"向后"构建列表来构建两个节点的链表:

node nodeB = { 2, (node *)0 };  // end of list
node nodeA = { 1, &nodeB };     // A.next => B

但是,如果我想做一个循环链表呢?这行不通:

node nodeA = { 1, &nodeB };
node nodeB = { 2, &nodeA };

,因为nodeB在nodeA想要引用它的时候没有被声明。

我可以在运行时构建链表(动态分配节点,然后设置next链接)。但是是否有一种方法可以在编译时获得有效的前向声明?

这看起来是一个相当普通的情况,向前声明将工作:

extern node nodeB;
node nodeA = { 1, &nodeB };
node nodeB = { 2, &nodeA };