【问题标题】:struct define in C?结构在 C 中定义?
【发布时间】:2026-01-01 11:10:01
【问题描述】:

有时我们会遇到“struct xxxx;”在C文件中,以libusb.so的头文件libusb.h为例,如下图(struct libusb_device):

结构 libusb_context;
结构 libusb_device;
结构 libusb_device_handle;

这是什么意思?仅仅是声明吗?但我找不到struct libusb_device 的定义位置。

整个 libusb.h 文件在这里:libusb.h

【问题讨论】:

  • 你需要阅读一本好的 C 编程书籍。然后查看一些关于struct 的参考资料。阅读后,您应该参考 C 标准,例如到n1570
  • 这三个声明都说“存在具有给定名称的结构类型”。结构的内容未定义,但您现在可以拥有和使用指向这些类型的指针。例如,它们可以用于函数原型。它们通常被称为“不透明”类型。类型的全部细节可能只在一个源文件中定义,或者它们可能在一个单独的私有头文件中,不分发给库的用户。
  • 我投票决定将此问题作为离题结束,因为这不是编程问题。 OP 就是不懂 C。需要一本书
  • @PeterJ_01:Stack 中保留了许多问题,Overflow 询问了 C 的某些方面,这意味着提问者不了解或不了解 C。它们之所以有主题是因为每个问题都是“一个实用的、可回答的问题这是软件开发所独有的。”虽然您现在可能会发现一些知识是初级的,但曾经有一段时间您并不了解它,并且可以将其记录下来以供未来的 Stack Overflow 用户使用。
  • @JonathanLeffler 现在我知道这三个声明是“不透明”类型,用户不知道它是如何实现的,也不需要知道。达到封装的目的。感谢您的所有回答,我知道我需要阅读更多书籍,谢谢!

标签: c struct libusb


【解决方案1】:

这是一个声明(在 C++ 中)或不完整的类型声明(在 C 中):

struct libusb_context;

这是一个定义(在 C++ 中)或一个 [完整类型] 声明(在 C 中):

struct libusb_context { int my_device_id; };

了解这些术语后,您可以找到许多关于差异的解释。例如,看这里:What is the difference between a definition and a declaration?

【讨论】:

  • 这实际上来自 C++ 术语。 C 术语不包括结构类型定义的概念。在 C 中,两者都是结构类型 declarations。前者声明了一个不完整的类型。后者声明了一个完整的类型。
  • C 中的不完整类型仍然应该与 C++ 声明具有相同的功能,对吗?
  • 已更新以添加其他术语。感谢您的帮助。