这样写是为什么

heytry 2011-05-28 02:43:41
看到很多高质量的开源C代码经常这样定义一个结构:
typedef struct _mystruct {
....
} mystruct;
我不太明白为啥要typedef一下,而且在代码中只用mystruct, 没用过 _mystruct, 那为啥不像下面这样定义得了:
struct mystruct {
....
};
...全文
120 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
xspace_time 2011-05-28
  • 打赏
  • 举报
回复
定义一个别名而已,这样比较体面
如此美丽的你 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
typedef这种用法并不是什么遗留问题或者习惯用法。

这是一种抽象方法,它把c/c++的类型系统抽象为代码中描述的世界的物件,例如写一个字符串处理程序,设计者可能希望表示字符串的长度,这个长度就是字符串这个“世界”中的一个物件,当然你可以直接用unsigned定义长度,但这样做不明确、不直观,更好的方法是把unsigned抽象为一个明确的标识符,例如length:

typedef u……
[/Quote]
++
就想叫yoko 2011-05-28
  • 打赏
  • 举报
回复
1楼 5楼正解
C++中结构体就没有必要typedef了
C中也可以
typedef struct
{
int a;
int b;
}stru;
或者
typedef struct stru
{
int a;
int b;
}stru;
这样以后声明stru型结构体变量时就不用带上struct关键字了
何逢军 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anyidan 的回复:]
引用 5 楼 supermegaboy 的回复:
typedef这种用法并不是什么遗留问题或者习惯用法。

这是一种抽象方法,它把c/c++的类型系统抽象为代码中描述的世界的物件,例如写一个字符串处理程序,设计者可能希望表示字符串的长度,这个长度就是字符串这个“世界”中的一个物件,当然你可以直接用unsigned定义长度,但这样做不明确、不直观,更好的方法是把unsigned抽象为一个明确的……
[/Quote]
便于修改或书写,起一个好记的名称代替!!!编代码时书写也不用每次都struct xxxxxx这样一长串,省事!!!!
laoyang103 2011-05-28
  • 打赏
  • 举报
回复
5楼正解 比如说 typedef int weight 这样就是定义一个重量类型

其实还是整形
塞文 2011-05-28
  • 打赏
  • 举报
回复
也有一种是为了编码方便。typedef定义一个简短的语句,总比在前面加上struct好而方便。
AnYidan 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 supermegaboy 的回复:]
typedef这种用法并不是什么遗留问题或者习惯用法。

这是一种抽象方法,它把c/c++的类型系统抽象为代码中描述的世界的物件,例如写一个字符串处理程序,设计者可能希望表示字符串的长度,这个长度就是字符串这个“世界”中的一个物件,当然你可以直接用unsigned定义长度,但这样做不明确、不直观,更好的方法是把unsigned抽象为一个明确的标识符,例如length:

typedef u……
[/Quote]
++

1. 起一个更有意义的名字
2. 如果某一个 struct 与依赖平台,移植是更容易修改
飞天御剑流 2011-05-28
  • 打赏
  • 举报
回复
typedef这种用法并不是什么遗留问题或者习惯用法。

这是一种抽象方法,它把c/c++的类型系统抽象为代码中描述的世界的物件,例如写一个字符串处理程序,设计者可能希望表示字符串的长度,这个长度就是字符串这个“世界”中的一个物件,当然你可以直接用unsigned定义长度,但这样做不明确、不直观,更好的方法是把unsigned抽象为一个明确的标识符,例如length:

typedef unsigned length

以后用length定义变量时,就表示我要定义一个表示字符串长度的变量,而不是一个unsigned变量,抽象是这种方法所强调的东西,unsigned就成为了length的底层类型,以后想换成另一种底层类型,只需简单地修改typedef定义(C)或声明(C++)就行了,不需要象直接用unsigned那样处处修改,这也是typedef带来的另一个好处,用术语来说就是声明局部化。
「已注销」 2011-05-28
  • 打赏
  • 举报
回复
路过学习一下
CrackValue 2011-05-28
  • 打赏
  • 举报
回复
顶1楼,学习了
zwhfly 2011-05-28
  • 打赏
  • 举报
回复
习惯用法:
typedef struct tagNode
{
int n;
struct tagNode *pNext;
}Node;
ljt3969636 2011-05-28
  • 打赏
  • 举报
回复
c语言的遗留问题,在c中
如果:
struct mystruct {
int i;
};


struct mystruct*p;//前面这个struct 是必须要加的(c++中可以不加)


如果c语言中

typedef struct {
int i;
}mystruct;


mystruct*p;//用typedef 后这个struct 就可以不加了,所以c代码中更习惯于加typedef,以便之后省事

但是在c++里

typedef struct _mystruct {
....
} mystruct

struct mystruct {
....
};

两个mystruct就没区别了,但是人们初于习惯...你懂得
南京浪人甲 2011-05-28
  • 打赏
  • 举报
回复
如果是:

struct _myStruct
{
...
};

用的时候就得:struct _myStruct xxxx;(C必须这样,C++就可以不要struct了)

而如果是:

typedef struct _myStruct
{
...
}myStruct;

用的时候就得:_myStruct xxxx;
heytry 2011-05-28
  • 打赏
  • 举报
回复
谢谢了,但觉得5楼及后面的一些人没弄清楚我的题意,
我问的不是typedef的作用,而是正如一楼所说的这个原因。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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