如何将函数指针返回为const?

时间:2016-07-23 22:03:09

标签: c function-pointers

我创建了一个动态数组struct Vector,其内部我一直隐藏在用户之外。相反,提供了与它们交互的功能,例如

bool Vector_push(struct Vector *vector, const void *value)

为了帮助弹出元素,struct保存了一个指向正确删除每个元素的函数的指针。该功能通过以下功能设置:

void Vector_set_type_destructor(struct Vector *vector, void (*type_destructor)(void *))

我觉得提供没有吸气剂的定位器有点奇怪,所以我很快就添加了以下功能。

const void (*Vector_type_destructor(const struct Vector *vector))(void *);

注意我是如何添加const关键字的,因为我希望类型析构函数只能通过setter修改,而不能通过返回的指针修改。但是,我收到了clang的以下警告。

src/Vector.c:184:66: warning: function cannot return qualified void type
      'const void' [-Wqualified-void-return-type]
const void (*Vector_type_destructor(const struct Vector *vector))(void *) {
                                                                 ^
src/Vector.c:185:12: warning: incompatible pointer types returning
      'void (*const)(void *)' from a function with result type
      'const void (*)(void *)' [-Wincompatible-pointer-types]
    return vector->type_destructor;

如何正确地通过函数返回指针void (*type_destructor)(void *)而不将其暴露给可能的修改?

1 个答案:

答案 0 :(得分:4)

尝试将const放在*旁边,而不是:

void (*const Vector_type_destructor(const struct Vector *vector))(void *);