关于typedef struct求解释

老王爱上猫 2012-05-08 11:32:28
下面三种定义有什么不同?主要是第一种定义起到了什么作用,同事说有构造函数,不懂,求大牛解释。
typedef struct _A
{
}A;

typedef struct
{
}B;

struct C
{
};
...全文
198 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
northcan 2012-05-08
  • 打赏
  • 举报
回复
我觉得主要是这样:

(1)
typedef struct _A
{
}A;
如果是定义一个链表的Node,就一定要加上结构tag,也就是_A。
如:
typedef struct _A
{
int data;
struct _A * next;
}A;
如果没有_A,那么next指针无法声明。

(2)
typedef struct
{
}B;
除去第(1)种情况,那么结构tag用处就不是太大了。定义新类型B之后,
以后就可以直接B b;这样用了。

(3)
struct C
{
};
在有些c/c++书籍里面,一些西方国家的c大牛们,不提倡用typedef定义新的结构体类型。
他们提倡使用结构tag。也就是在声明结构变量时,用:sturct C c;。
他们说这样的代码可读性好,让人很容认识到c是一个结构体类型的变量。
jackyjkchen 2012-05-08
  • 打赏
  • 举报
回复
另外,有些库倾向于使用
typedef struct _A
{
}A;

而不是
typedef struct
{
}C;

是为了移植性

因为有些编译器,标准比较老,不支持匿名结构和匿名联合

jackyjkchen 2012-05-08
  • 打赏
  • 举报
回复
对于C++来说差别不大

对于C来说,声明A和B类型的对象不需要前面加struct,_A和C要

构造函数什么的是瞎扯,结构是否自动生成构造函数取决于C还是C++

这种风格Windows SDK普遍使用(因为是C的,能减少struct关键字的使用),Linux内核极力反对(认为typedef尽量少用,否则导致类型混乱)

呵呵,自己看着办吧
qiangv 2012-05-08
  • 打赏
  • 举报
回复
typedef struct _A
{
}A;



typedef struct
{
}B;

struct C
{
};

C中的最开始的定义是如下:
struct C
{
};
后来C++来了,也支持这么定义,但是和C有区别,C中使用这个结构体类型必须使用struct C,而C++可以使用struct C,也可以使用C。

后来为了方便,不管在C中还是C++中,只要按照如下写了,就可以省略struct
typedef struct
{
}B;

至于下面这个方法和有指定A没指定A都一样。
typedef struct _A
{
}A;

就是这里做了两件事,第一个A,是顶一个结构体struct A,第二个A是利用typedef重命名为A。
相当于是下面的结合:
struct _A{}
typedef struct _A A;
甚至_A可以直接用A代理。

至于构造函数是否有,只要是C++里面的结构体,不管哪种定义,都有构造函数。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧