Tag: opaque pointers

具有多个定义的不透明结构

我正在考虑用C语言实现一个简单的接口模式。 一个关键特性是它将为接口的公共头提供的不透明结构提供多个定义,也就是说,不同的实现将为该结构提供不同的底层数据(因此,跨越不同的转换单元,相同的结构将具有不同的实现)。 我找不到任何参考,这是一个好的或坏的设计模式。 至少它似乎没有违反严格的别名规则,只依赖于公共第一个元素的一致顺序和填充,这是由C标准保证的(据我所知)。 当然我知道C中的面向对象模式,但是我看不到这个特定的模式。 这可以接受吗? 是这样的模式甚至使用? (我找不到任何东西) 为了便于理解,以下是三个源文件的工作示例: reader.h(公共接口定义) #ifndef READER_H #define READER_H typedef struct reader_s reader_t; char reader_read(reader_t* r); #endif reader.c(接口的胶水逻辑) #include “reader.h” typedef char (reader_f)(reader_t*); struct reader_s{ reader_f* rfunc; }; char reader_read(reader_t* r) { return r->rfunc(r); } reader1.h(接口的实现,标题) #ifndef READER1_H #define READER1_H #include “reader.h” reader_t* reader1_get(void); #endif reader1.c(接口的实现,代码) #include “reader1.h” typedef char […]

是否允许从TYPE *转换为unsigned char *?

C99 – 特别是第6.2.6.1节第4段 – 规定允许将对象表示复制到unsigned char数组中: struct { int foo; double bar; } baz; unsigned char bytes[sizeof baz]; // Do things with the baz structure. memcpy(bytes, &baz, sizeof bytes); // Do things with the bytes array. 我的问题:我们不能通过简单的转换来避免额外的内存分配和复制操作吗? 例如: struct { int foo; double bar; } baz; unsigned char *bytes = (void *)&baz; // Do stuff […]

c typedef(ed)opaque指针

我已经定义了一个不透明的结构和相关的API,如下所示: typedef struct foo foo; foo *create_foo(…); delete_foo(foo *f); 我无法在我的c文件中定义结构。 给出重新定义错误。 typedef struct foo { int implementation; }foo; 我可以在没有typedef的c文件中使用foo,但我想要typedef(即直接使用它作为foo *)。 有办法吗?