我在stack.h文件中声明了以下函数,当我编译项目时,错误显示了l_ifc_handle的未知类型名称。
extern l_bool l_ifc_init (l_ifc_handle iii);
extern void l_ifc_wake_up (l_ifc_handle iii);
extern void l_ifc_rx (l_ifc_handle iii);
extern void l_ifc_tx (l_ifc_handle iii);
extern l_u16 l_ifc_read_status (l_ifc_handle iii);
extern void l_ifc_aux (l_ifc_handle iii);
extern l_u16 l_sys_irq_disable (l_ifc_handle iii);
extern void l_sys_irq_restore (l_ifc_handle iii);
但我的l_ifc_handle
是另一个名为driver.h的文件中的结构变量,用于driver.c
typedef enum {
LI0
}l_ifc_handle;
此driver.h文件包含我的stack.h头文件。但是l_ifc_handle
在我的driver.h文件中。
如果我使用
typedef enum {
LI0
} extern l_ifc_handle;
然后它给出了一个称为多个存储类的错误。我应该在哪个文件中放置上面的typedef?
答案 0 :(得分:4)
typedef enum {
LI0
} extern l_ifc_handle;
然后它会产生一个称为多个存储类的错误。
存储说明符(typedef, auto, static, register, extern
)是互斥的,您不能在同一声明中使用它们。
答案 1 :(得分:0)
请勿将driver.h
加入stack.h
。当您需要driver.h
时,请使用转发声明并将.c
包含在LI0
个文件中。
extern l_bool l_ifc_init (enum l_ifc_handle iii);
extern void l_ifc_wake_up (enum l_ifc_handle iii);
extern void l_ifc_rx (enum l_ifc_handle iii);
extern void l_ifc_tx (enum l_ifc_handle iii);
extern l_u16 l_ifc_read_status (enum l_ifc_handle iii);
extern void l_ifc_aux (enum l_ifc_handle iii);
extern l_u16 l_sys_irq_disable (enum l_ifc_handle iii);
extern void l_sys_irq_restore (enum l_ifc_handle iii);