在C中的另一个文件中使用typedef struct

在C中的另一个文件中使用typedef struct,c,struct,c-header,C,Struct,C Header,你好,我是C的新手 我想“导出”并在其他文件中使用typedef结构,但似乎效果不太好 我有这样的错误 未知类型名称“CAN\u frame” “CAN_RxMessage”的存储大小未知 未定义类型“struct CAN\u frame”的使用无效 这是我的档案: main.h #包括“can.h” 类型定义结构 { uint16\u t STDID;//ID uint8_t IDE; uint8\u t RTR;//请求帧ou数据帧 uint8_t DLC;//名称为八位字节 uint8_

你好,我是C的新手

我想“导出”并在其他文件中使用typedef结构,但似乎效果不太好

我有这样的错误

未知类型名称“CAN\u frame”
“CAN_RxMessage”的存储大小未知
未定义类型“struct CAN\u frame”的使用无效
这是我的档案:

main.h

#包括“can.h”
类型定义结构
{
uint16\u t STDID;//ID
uint8_t IDE;
uint8\u t RTR;//请求帧ou数据帧
uint8_t DLC;//名称为八位字节
uint8_t data[8];//8个八位组的表
}CAN_框架;
can.h

#包括“main.h”
can.c

#包括“can.h”
CAN帧CAN消息;
无效接收(无效)
{
//可以用数据填充消息吗
}
当然,我还想使用这个CAN_RxMessage,它在main.c中填充了数据(用usart将它发送到我的计算机)

我尝试在我的CAN.c和CAN.h中使用extern、extern struct、struct和手动定义的CAN_框架(但我认为它只会在我的main.c中重载或重新定义CAN_框架,所以它似乎没有用)。

这就是它

can.h

typedef结构\u可以\u帧
{
uint16\u t STDID;//ID
uint8_t IDE;
uint8\u t RTR;//请求帧ou数据帧
uint8_t DLC;//名称为八位字节
uint8_t data[8];//8个八位组的表
}CAN_框架;
can.c

#包括“can.h”
main.c

#包括“can.h”
CAN帧CAN消息;
无效接收(无效)
{
//可以用数据填充消息吗
}

So
main.h
包括
can.h
can.h
包括
main.h
。回想一下,包含基本上是就地转储文件内容(作为文本)。循环包含应该如何工作?在我看来,它类似于
can.h
包含
main.h
,以及
main.h
包含
can.h
。预处理器可能会产生一个关于包含文件无限循环的错误。了解如何使用标头防护来防止多个包含和包含循环。请参阅,即使使用标头防护,标头之间的循环依赖关系也常常有问题。在出现这种依赖关系的地方,它们可以而且应该通过适当的重构来解决。谢谢,它帮助了我!我还使用extern在文件之间共享全局变量。