gpt4 book ai didi

c - C 中的函数指针 - 性质和用法

转载 作者:太空狗 更新时间:2023-10-29 16:22:02 25 4
gpt4 key购买 nike

我刚刚读到一个有趣的问题 here这让我想知道另外两件事:

  1. 既然从概念上讲,函数的唯一性是由它们的不同名称确保的,为什么还要比较函数指针?
  2. 编译器是否将函数指针视为特殊指针?我的意思是它是否将它们视为指向 void * 的指针,或者它是否包含更丰富的信息(如返回类型、参数数量和参数类型?)

最佳答案

为什么有人要比较函数指针?这是一个示例:

#include <stdbool.h>

/*
* Register a function to be executed on event. A function may only be registered once.
* Input:
* arg - function pointer
* Returns:
* true on successful registration, false if the function is already registered.
*/
bool register_function_for_event(void (*arg)(void));

/*
* Un-register a function previously registered for execution on event.
* Input:
* arg - function pointer
* Returns:
* true on successful un-registration, false if the function was not registered.
*/
bool unregister_function_for_event(void (*arg)(void));

register_function_for_event 的主体只看到arg。它没有看到任何函数名称。它必须比较函数指针以报告有人注册了同一个函数两次。

如果你想支持像unregister_function_for_event这样的东西来补充上面的内容,你所拥有的唯一信息就是函数地址。因此,您需要再次将其传入并与它进行比较,以允许删除。

至于更丰富的信息,是的。当函数类型包含原型(prototype)时,它是静态类型信息的一部分。请注意,在 C 中,可以在没有原型(prototype)的情况下声明函数指针,但这是一个过时的功能。

关于c - C 中的函数指针 - 性质和用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48495625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com