gpt4 book ai didi

c - ANSI C - 多函数指针赋值

转载 作者:太空宇宙 更新时间:2023-11-04 02:41:53 26 4
gpt4 key购买 nike

我有一个看起来有点像这样的结构:

struct Data
{
int a;
float b;
char *c;

int (*read)(struct Data *data, int arg1);
int (*write)(struct Data *data, int arg1, int arg2);
int (*update)(struct Data *data, int arg1, int arg2, int arg3);
int (*erase)(struct Data *data, int arg1);
/* ... */
}

... 意味着有一堆其他的函数指针与上面类似(也就是说,它们都返回一个 int 并将指向 Data 的指针作为第一个参数,但其他参数可能不同) .

假设总共有 20 个函数指针。在一个特殊函数 DataInit() 中,我为它们分配函数,如下所示:

Data->read = readA;
Data->write = writeA;
/* readA() and writeA() are functions defined elsewhere in the code, with argument lists same as corresponding function pointers */

现在我必须对另一个 Data 类型的对象执行相同的操作,不同之处在于它是“只读”的;它基本上意味着必须从这 20 个函数指针中分配 15 个,这样在调用它们之后它们应该返回错误代码 NOT_SUPPORTED。 其余的保持不变(例如,readA() 被分配给函数指针 (*read),就像上面那样)。

我想知道是否有一种方法可以在不为每个指针实现一个函数的情况下实现它(例如,updateB() 接受三个参数并且它的主体只是return NOT_SUPPORTED)。不幸的是,我不能只将它们设置为 NULL

我一直在考虑预处理器宏,但老实说,这对我来说是黑魔法。

最佳答案

不可以,您不能将函数指针强制转换为不同类型的函数指针(甚至更糟,不同类型的指针)。这有充分的理由导致 C 标准中的未定义行为。

在目前的架构中,这不仅是每个人都能逃脱的理论问题,而且实际上可能会以意想不到的方式使您的程序崩溃。阅读this blog post如果您需要详细信息。

关于c - ANSI C - 多函数指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30978101/

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