Tob*_*oby 5 c typedef const handle opaque-pointers
如果我创建了一个C模块,它向用户提供一个指向前向声明结构的指针,如下所示:
typedef struct FOO_Obj *FOO_Handle;
Run Code Online (Sandbox Code Playgroud)
如果我然后声明函数原型使用它作为const
限定参数:
void FOO_work(const FOO_Handle fooHandle);
Run Code Online (Sandbox Code Playgroud)
如何const
应用?
const struct FOO_Obj *FOO_Handle // A
struct FOO_Obj *const FOO_Handle // B
const struct FOO_Obj *const FOO_Handle // C
Run Code Online (Sandbox Code Playgroud)
或者是UB?
B.(您提供的代码没有未定义的行为。)
函数调用
void FOO_work(const FOO_Handle fooHandle);
Run Code Online (Sandbox Code Playgroud)
相当于
void FOO_work(struct FOO_Obj* const fooHandle);
Run Code Online (Sandbox Code Playgroud)
函数中的变量fooHandle
将被编码为指向非 conststruct FOO_Obj
对象的 const 指针。您将无法添加 const 限定符以fooHandle
使其成为指向 const 对象的指针。
相反,如果您想要一个指向 const 对象的指针,并保持结构隐藏,则必须创建另一个 typedef:
typedef const struct FOO_Obj* FOO_ConstHandle;
Run Code Online (Sandbox Code Playgroud)