C++ “的定义在哪里?”;结构PSI“U螺纹”;在MySQL源代码中?
在研究C++ “的定义在哪里?”;结构PSI“U螺纹”;在MySQL源代码中?,c++,mysql,c,struct,C++,Mysql,C,Struct,在研究MySQL源代码时,我发现了一些没有任何定义的奇怪结构。例如mysql server code\include\mysql\PSI\PSI.h中的structPSI\u线程。但是我知道在源代码文件中一定有一个定义,否则它就不能被遵守。有人知道结构的真正定义在哪里吗 struct PSI_线程的定义 它是一个不透明的结构 对于,不透明类型是内容未知的结构; 通常,opaques类型的声明与代码显示的完全一样,在标题中: struct PSI_thread; typedef struct PS
MySQL
源代码时,我发现了一些没有任何定义的奇怪结构。例如mysql server code\include\mysql\PSI\PSI.h
中的structPSI\u线程。但是我知道在源代码文件中一定有一个定义,否则它就不能被遵守。有人知道结构的真正定义在哪里吗
struct PSI_线程的定义
它是一个不透明的结构
对于,不透明类型是内容未知的结构;
通常,opaques类型的声明与代码显示的完全一样,在标题中:
struct PSI_thread;
typedef struct PSI_thread PSI_thread;
包含标题的代码将有一些限制:
- 你不知道物体的大小李>
- 您不能直接声明该类型的对象,但只能处理指针,这也意味着您不能取消引用它们或分配新对象李>
库(在您的例子中)提供了访问和处理类型本身的函数,包括分配和解除分配。
这些函数不能只是内联函数,因为它们需要访问类型的内容才能工作
当您需要导出库的接口时,不透明类型非常有用:由于您不知道不透明类型的大小或内部顺序,库可以在不更改ABI的情况下更改不透明类型,因此需要使用它重建软件
您可以将其视为库的私有上下文,由库安全地执行其工作
编辑
如果在整个源代码中找不到转发声明,可以将其视为void*
。空结构
最大的区别在于空结构与其他可能的类型不同,编译器可能会抱怨类型不匹配。它是一个不透明的结构
对于,不透明类型是内容未知的结构;
通常,opaques类型的声明与代码显示的完全一样,在标题中:
struct PSI_thread;
typedef struct PSI_thread PSI_thread;
包含标题的代码将有一些限制:
- 你不知道物体的大小李>
- 您不能直接声明该类型的对象,但只能处理指针,这也意味着您不能取消引用它们或分配新对象李>
库(在您的例子中)提供了访问和处理类型本身的函数,包括分配和解除分配。
这些函数不能只是内联函数,因为它们需要访问类型的内容才能工作
当您需要导出库的接口时,不透明类型非常有用:由于您不知道不透明类型的大小或内部顺序,库可以在不更改ABI的情况下更改不透明类型,因此需要使用它重建软件
您可以将其视为库的私有上下文,由库安全地执行其工作
编辑
如果在整个源代码中找不到转发声明,可以将其视为void*
。空结构
最大的区别在于空结构与其他可能的类型不同,编译器可能会抱怨类型不匹配。感谢您的回复,我知道C中的不透明类型。但我感到困惑的是,即使我在整个源代码项目中查找结构,我仍然找不到它。我认为结构的真正定义必须在源代码文件(.h文件、.cc文件或.cpp文件)中的某个地方,不是吗?谢谢你的回答,我知道C中的不透明类型。但我感到困惑的是,即使我在整个源代码项目中查找结构,我仍然找不到它。我认为结构的真正定义必须在源代码文件(.h文件、.cc文件或.cpp文件)中的某个地方,不是吗?