我有一行如下:
static STAILQ_HEAD(, my_struct) _myqueue;
我以前没有理由使用QUEUE宏。是否必须在进行此调用时声明“my_struct”?
我只是问,因为稍后当我尝试在我的代码中使用my_struct时,我得到一个指向不完整类型消息的引用指针。我实际上在这里编辑别人的代码,我找不到任何地方定义的my_struct
答案 0 :(得分:1)
不,之前不必声明my_struct。
当你在声明中提到一些未知的结构名称而没有指定结构的内容时,它有一个不完整的类型:它只是告诉编译器会有一些带有该名称的结构,但还不是它里面的东西。
您可以声明指向不完整类型的指针(发生在STAILQ_HEAD宏中),因为编译器不需要知道它的大小或内容。但是,在实际声明完整结构之前,不能实例化不完整类型或取消引用指向不完整类型的指针。