gpt4 book ai didi

您可以将函数参数结构传递给函数吗?

转载 作者:行者123 更新时间:2023-12-02 08:14:19 25 4
gpt4 key购买 nike

我正在使用第三方库(使用我无法编辑的代码!),它有一个接受大量参数的函数。使用它看起来有点像这样:

void func(int a, int b, int c, int d, int e) {
//do something...
}

int main(void) {
func(1, 2, 3, 4, 5);
}

但是,它接受这些参数并立即将它们丢弃。我想坚持这些论点并将它们用于其他事情。我喜欢做的是:

void func(int a, int b, int c, int d, int e) {
//do something...
}

typedef struct foo foo;
struct foo {
int a;
int b;
int c;
int d;
int e;
};

foo bar = {1, 2, 3, 4, 5};

int main(void) {
func(bar);
}

不幸的是,这会抛出一个类型错误:

main.c:17:8: error: incompatible type for argument 1 of 'func'
func(bar);
^~~
main.c:12:6: note: expected 'int' but argument is of type 'foo {aka struct foo}'
void func(int a, int b, int c, int d, int e) {
^~~~
main.c:17:3: error: too few arguments to function 'func'
func(bar);
^~~~

执行 func(bar.a, bar.b, bar.c, bar.d, bar.e); 可以,但是很冗长。我可以做任何指针魔术来解决这个问题吗?同样,我无法修改库代码。

最佳答案

不,没有办法做到这一点。但是,如果您经常调用该函数,则可能值得将该函数包装在您自己的函数中,这样您就可以将指向结构的指针作为参数传递并让您的函数通过不太优雅的参数方法调用实际函数。

可能值得一提的是,对于传递的每个参数,都会将一个项目压入堆栈,因此如果函数需要特定数量的参数,则在二进制级别,它期望将许多参数压入堆栈。对于您无法控制的功能,这不是您可以更改的内容。

关于您可以将函数参数结构传递给函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381962/

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