gpt4 book ai didi

c - 函数声明中的函数指针是否有C语法

转载 作者:太空狗 更新时间:2023-10-29 15:14:35 25 4
gpt4 key购买 nike

不是为函数声明函数指针 typedef,是否可以从函数声明中获取它?

通常,

int foo(int x);
typedef int (*fooFunc)(int);
fooFunc aFunc;

我想要的:

int foo(int x);
foo* aFunc;

我想将它用于 dlsym:

foo* aFunc;
aFunc = dlsym(lib, "foo");
aFunc(x);

如果我更新了 foo 而忘记了更新 fooFunc,反之亦然,那就不好了。此外,我可能有很多函数,维护函数声明和与这些函数关联的函数指针类型定义会带来更多工作。

结论:AndreyT 的答案是最便携的,但如果您为 gcc 编写代码,那么 typeof 是一个很好的解决方案。

最佳答案

如果您专门讨论声明,即函数的非定义声明,您可以通过为函数类型定义一个类型定义名称并在两种情况下都使用它来消除冗余 -声明函数本身并声明指向它的指针,就像这样

typedef int FuncType(int); /* <- function type */
FuncType foo; /* <- declaration of `int foo(int)` */
FuncType *aFunc; /* <- definition of `int (*aFunc)(int)` */

即typedef 名称可用于非定义函数声明。但是,您不能在函数定义 中使用 typedef 名称,这意味着稍后您仍然需要这样做

int foo(int x) /* <- no way to use the above `FuncType` here */
{
/* whatever */
}

这基本上使上述技巧几乎无用。

当然,如果您遇到这种情况,这不会帮助您从现有不可修改的函数声明生成指针。

关于c - 函数声明中的函数指针是否有C语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1675092/

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