C++为什么有些头文件中的定义结构体不用{}

时间:2022-06-19 19:48:30
通常结构体不是应该这样的形式:
typedef struct {
int data;
int text;
} S1;

但是我发现很多C++提供的标准头文件里通过VS的转到定义,最后找到的是这样的:

typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t;
typedef struct _Cnd_internal_imp_t  *_Cnd_imp_t;

我试过通过VS的功能寻找 _Mtx_internal_imp_t 这个结构体的定义,发觉一直就指向了这条,应该是说明这里是定义结构体并重新定义了别名的,但是疑问就出来了,通常定义结构提不是应该是
typedef struct{
X XXX;
X XXX;
}XX
这种形式的,但是这里没有了中间的{}和成员,这种是正常的吗?我找了下资料都没有详细说明这种的情况,该如何理解.
上面的头文件是:xthrcommon.h

5 个解决方案

#1


typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t; 表示_Mtx_imp_t 为 结构体_Mtx_internal_imp_t  的指针。结构体_Mtx_internal_imp_t  在其它地方定义了。
呵呵, 要一个字一个字的解释, 等待老师

#2


typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t;
中的_Mtx_internal_imp_t  其实是定义的,只不过被封装起来,我们看不到

#3


引用 2 楼 ant2012 的回复:
typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t;
中的_Mtx_internal_imp_t  其实是定义的,只不过被封装起来,我们看不到

其实我知道这个就是却了一个改名的定义,但是正常应该有一个定义结构体的代码,正常VS有一个功能是转到定义,但是我通过这个功能最后没有办法找到这个定义,所以我才产生一个疑问:
难道不需要定义就能改名?

#4


1.    typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t;  
      这行定义的是一个指针类型。该指针类型所指向的数据为struct _Mtx_internal_imp_t 

2.  即使程序中还从来没有struct _Mtx_internal_imp_t 的具体定义,也可以直接定义它的指针类型。  这叫做incomplete datatype。 因为对于编译器来说,指针类型的size是确定的,是4字节(对于32位编程)或者8字节(64字节)。即使此时编译器对于struct _Mtx_internal_imp_t 具体是什么、size都一无所知,也不影响编译器对该指针类型的对象实例的声明、定义、分配内存空间。

#5


typedef 的用法,不是结构体的写法

#1


typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t; 表示_Mtx_imp_t 为 结构体_Mtx_internal_imp_t  的指针。结构体_Mtx_internal_imp_t  在其它地方定义了。
呵呵, 要一个字一个字的解释, 等待老师

#2


typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t;
中的_Mtx_internal_imp_t  其实是定义的,只不过被封装起来,我们看不到

#3


引用 2 楼 ant2012 的回复:
typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t;
中的_Mtx_internal_imp_t  其实是定义的,只不过被封装起来,我们看不到

其实我知道这个就是却了一个改名的定义,但是正常应该有一个定义结构体的代码,正常VS有一个功能是转到定义,但是我通过这个功能最后没有办法找到这个定义,所以我才产生一个疑问:
难道不需要定义就能改名?

#4


1.    typedef struct _Mtx_internal_imp_t  *_Mtx_imp_t;  
      这行定义的是一个指针类型。该指针类型所指向的数据为struct _Mtx_internal_imp_t 

2.  即使程序中还从来没有struct _Mtx_internal_imp_t 的具体定义,也可以直接定义它的指针类型。  这叫做incomplete datatype。 因为对于编译器来说,指针类型的size是确定的,是4字节(对于32位编程)或者8字节(64字节)。即使此时编译器对于struct _Mtx_internal_imp_t 具体是什么、size都一无所知,也不影响编译器对该指针类型的对象实例的声明、定义、分配内存空间。

#5


typedef 的用法,不是结构体的写法