gpt4 book ai didi

在C中将两个函数连接成一个

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:09 25 4
gpt4 key购买 nike

如何将两个不带任何参数且不返回任何内容的函数连接(或合并)到一个函数中?在 JavaScript 中我会这样做:

function f1() {
console.log("f1 called");
}
function f2() {
console.log("f2 called");
}
function function_concat(fa, fb) {
var final = function() {
fa();
fb();
};
return final;
}
var merged = function_concat(fa, fb);
merged();

在 C 中,这是我所拥有的:

#include <stdio.h>
#include <stdlib.h>

typedef void (*fptr)(void);
void f1() {
printf("f1 called");
}
void f2() {
printf("f2 called");
}

fptr function_concat(fa, fb) {
// What to do here??
}
int main(int argc, const char **argv) {
fptr merged = function_concat(f1, f2);
fptr();
}

我知道我必须返回一个静态指针,但我不能在 C 的函数中定义一个函数,如果我已经在一个函数中,就很难创建新函数。有人知道这样做的方法吗?

最佳答案

您不能在运行时用 C 定义函数,因此您唯一的选择是实现某种代理。您可以使用全局变量来引用函数指针,但要给出一个隐含的答案,您不能在 C 中真正模拟它。

如果你需要改变fa_fb_的接口(interface),你需要再次调用function_concat,或者设置全局变量直接,但那时您不需要代理功能。

static fptr fa_, fb_;

void function_concat_proxy() {
fa_();
fb_();
}

fptr function_concat(fptr fa, fptr fb) {
fa_ = fp;
fb_ = fb;
return function_concat_proxy;
}

关于在C中将两个函数连接成一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811954/

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