c - 向不透明句柄添加 const-ness

标签 c constants typedef handle opaque-pointers

如果我创建了一个 C 模块,它向用户提供一个指向前向声明结构的句柄,如下所示:

typedef struct FOO_Obj *FOO_Handle;

如果我然后声明将其用作 const 限定参数的函数原型(prototype):

void FOO_work(const FOO_Handle fooHandle);

const 是如何应用的?

const struct FOO_Obj *FOO_Handle // A
struct FOO_Obj *const FOO_Handle  // B
const struct FOO_Obj *const FOO_Handle  // C

还是UB

最佳答案

B. (您提供的代码没有未定义的行为。)

函数调用

void FOO_work(const FOO_Handle fooHandle);

相当于

void FOO_work(struct FOO_Obj* const fooHandle);

函数中的变量fooHandle 将成为指向非常量struct FOO_Obj 对象的const 指针。您将无法将 const 限定符添加到 fooHandle 以使其成为指向 const 对象的指针。

相反,如果您想要一个指向常量对象的指针,并隐藏该结构,您必须创建另一个 typedef:

typedef const struct FOO_Obj* FOO_ConstHandle;

关于c - 向不透明句柄添加 const-ness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406719/

相关文章:

c++ - 如何使用 oci 或任何其他库以 sys 帐户登录 oracle

c++ - 表达式的行为 : Defined or Undefined?

c++ - 是什么让 const 在机器的较低级别?

c - 错误 C2143 : syntax error : missing ')' before '*'

c - 为什么要将空结构创建为新的 typedef 并将其用作指针类型?

c++ - Direct3D typedef 用法

c - 如何在C中最后一行之前添加一行

c++ - 跨平台截图

javascript - 我如何使用另一个 js 类 n react native 的键从 const 获取值?

c++ - Effective C++,第三版 : Overloading const function