【发布时间】:2017-03-02 13:20:01
【问题描述】:
我得到以下代码:
// file external_module.h
typedef externaldata * externalhdl; // opaque pointer
externalhdl external_Create();
// file internal_module.h
typedef internaldata * internalhdl; // opaque pointer
internalhdl internal_Create();
我想做的是使用外部模块的不透明指针作为模块内部的不透明指针来保存不必要的分配。目前我的解决方法是:
typedef struct {externalhdl e} internaldata;
internalhdl internal_Create()
{
internalhdl p = (internaldata*) malloc (sizeof(internaldata));
p.e = external_Create();
return p;
}
我想做的是使用类似的东西:
typedef ??? internaldata; //Don't know how
internalhdl internal_Create()
{
return external_Create();
}
从我的角度来看,这应该是可能的,因为两者都是指针,但我需要让它免费警告?感谢您的帮助。
【问题讨论】:
-
你为什么不创建一个头文件,你可以在其中定义这个结构,并将这个文件包含到你的所有源代码中?
-
不,你确实不想要这样做!你根本不想
typedef一个对象指针!最清楚的是:永远不会typedef指向数据类型的指针!哦,typedef绝对与内存分配有关。并提供minimal reproducible example。您的代码结构和问题尚不清楚。从你的表现来看,你好像迷失在你的个人typedef地狱中。 -
@betontalpfa:因为这不是 opaque 类型背后的想法。只是它不应该是
typedefed 的指针。 -
仅供参考:C 中的
typedef与其他语言的含义不同,即它不会创建新类型。它只是一个别名。您不会从类型检查中获得任何优势。 -
我会比 Olaf 的绝妙建议走得更远。永远不要 typedef 离开指针语义。甚至函数指针 typedef 也应该是函数 typedef,变量声明为指向它们的指针。
标签: c pointers typedef opaque-pointers