编译器给出一个名为Unknown type name的错误

时间:2018-01-25 13:00:26

标签: c typedef

我在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?

2 个答案:

答案 0 :(得分:4)

typedef enum { 
   LI0
} extern l_ifc_handle; 
  

然后它会产生一个称为多个存储类的错误。

存储说明符(typedef, auto, static, register, extern)是互斥的,您不能在同一声明中使用它们。

Is typedef a storage-class-specifier?

答案 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);