Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “的定义在哪里?”;结构PSI“U螺纹”;在MySQL源代码中?_C++_Mysql_C_Struct - Fatal编程技术网

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
中的struct
PSI\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文件)中的某个地方,不是吗?