typedef struct 结构体别名 *DRV_Handle? struct重复定义?

s2345q789 2014-01-24 11:25:53
最近在TI的例程里看到一段程序很是困惑,望高手指教:
typedef struct _DRV_Obj_{
...
...
...
}DRV_obj;

typedef struct DRV_obj *DRV_Handle;

这里先定义了结构体别名DRV_obj,也就是DRV_obj==struct _DRV_Obj_。那么
typedef struct DRV_obj *DRV_Handle不就等于typedef struct struct _DRV_Obj_ *DRV_Handle;
两个struct?但写成两个struct的方式编译就不通过,这是为什么?
本人新手,请大家多多指教!!!
在此谢过!
...全文
293 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
s2345q789 2014-01-28
  • 打赏
  • 举报
回复
真相大白了,我询问了TI的FAE,得到的答复是他们提供的例程里的这段定义是错误的,并会在未来放出的版本中更新。所以说typedef DRV_obj *DRV_Handle;才是正确的,谢谢大家的帮助。
zhuobattle 2014-01-24
  • 打赏
  • 举报
回复
error C2371: 'DRV_obj' : redefinition; 是这样的错误吧?很明显啊,你要去掉 struct啊,定义成:

typedef DRV_obj *DRV_Handle;
 //或者更加简单

typedef struct _DRV_Obj_{
...
}DRV_obj, *DRV_Handle;

s2345q789 2014-01-24
  • 打赏
  • 举报
回复
引用 6 楼 u013211165 的回复:
lz将宏和typedef搞混了 宏:进行文本替换 typedef:给类型取别名 因此,lz将 typedef struct DRV_obj *DRV_Handle; 中的红色替换成 struct _DRV_Obj_ 这样理解是错误的
是的,你的答复给了我很大启发。 但有点还是不明白,这个例子中struct DRV_Obj到底是一个什么样的类型呢?
dendiy 2014-01-24
  • 打赏
  • 举报
回复
lz将宏和typedef搞混了 宏:进行文本替换 typedef:给类型取别名 因此,lz将 typedef struct DRV_obj *DRV_Handle; 中的红色替换成 struct _DRV_Obj_ 这样理解是错误的
zbo_stepping 2014-01-24
  • 打赏
  • 举报
回复
int *p = 0x0000001; 这是给p赋值 而不是*p。。。 *在这只是表明 这个是个指针。。。struct可能也是这个意思吧? 另: 楼主的“百思不得其解”应改为“百撕不得骑姐”。话说我一看到 就想到后面一句。
zhuobattle 2014-01-24
  • 打赏
  • 举报
回复
引用 3 楼 s2345q789 的回复:
[quote=引用 1 楼 zhuobattle 的回复:] error C2371: 'DRV_obj' : redefinition; 是这样的错误吧?很明显啊,你要去掉 struct啊,定义成:

typedef DRV_obj *DRV_Handle;
 //或者更加简单

typedef struct _DRV_Obj_{
...
}DRV_obj, *DRV_Handle;

楼上,我的理解也和你一样,但是范例程序中确确实实是使用了typedef struct DRV_obj *DRV_Handle吗,并且编译通过。这就是我不解的地方。 另外程序中用DRV_Handle 定义了handle。我在调试程序时监测到handle的类型为struct DRV_obj。 百思不得其解啊!!![/quote] typedef struct DRV_obj *DRV_Handl;这样的定义我特意试了一下,vs2005编译报错: redefinition
s2345q789 2014-01-24
  • 打赏
  • 举报
回复
引用 1 楼 zhuobattle 的回复:
error C2371: 'DRV_obj' : redefinition; 是这样的错误吧?很明显啊,你要去掉 struct啊,定义成:

typedef DRV_obj *DRV_Handle;
 //或者更加简单

typedef struct _DRV_Obj_{
...
}DRV_obj, *DRV_Handle;

楼上,我的理解也和你一样,但是范例程序中确确实实是使用了typedef struct DRV_obj *DRV_Handle吗,并且编译通过。这就是我不解的地方。 另外程序中用DRV_Handle 定义了handle。我在调试程序时监测到handle的类型为struct DRV_obj。 百思不得其解啊!!!
s2345q789 2014-01-24
  • 打赏
  • 举报
回复
楼上,我的理解也和你一样,但是范例程序中确确实实是使用了typedef struct DRV_obj *DRV_Handle吗,并且编译通过。这就是我不解的地方。 另外程序中用DRV_Handle 定义了handle。我在调试程序时监测到handle的类型为struct DRV_obj。 百思不得其解啊!!!

64,670

社区成员

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

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