gpt4 book ai didi

c++ - typedef 函数指针?

转载 作者:行者123 更新时间:2023-11-30 16:17:55 25 4
gpt4 key购买 nike

我正在学习如何动态加载 DLL,但我不明白这一行

typedef void (*FunctionFunc)();

我有几个问题。如果有人能够回答我将不胜感激。

  1. 为什么使用typedef
  2. 语法看起来很奇怪; void 之后不应该有函数名什么的吗?它看起来像一个匿名函数。
  3. 是否创建函数指针来存储函数的内存地址?

所以我现在很困惑;你能为我澄清一下吗?

最佳答案

typedef 是将名称与类型关联起来的语言构造。
例如,您可以像使用原始类型一样使用它

typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();

像这样使用它们

myinteger i;   // is equivalent to    int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();

如您所见,您只需将 typedefed 名称替换为上面给出的定义即可。

难点在于C和C++中函数指针的语法和可读性,而typedef可以提高此类声明的可读性。然而,语法是适当的,因为函数 - 与其他简单类型不同 - 可能有返回值和参数,因此有时需要冗长而复杂的函数指针声明。

对于指向函数数组的指针以及其他一些更间接的风格,可读性可能会开始变得非常棘手。

回答你的三个问题

  • 为什么使用 typedef?为了便于阅读代码 - 特别是指向函数或结构名称的指针。

  • 语法看起来很奇怪(在指向函数声明的指针中)该语法读起来并不明显,至少在开始时是这样。使用 typedef 声明可以简化阅读

  • 是否创建函数指针来存储函数的内存地址?是的,函数指针存储函数的地址。这与 typedef 构造无关,它只是简化了程序的写入/读取;编译器只是在编译实际代码之前扩展 typedef 定义。

示例:

typedef int (*t_somefunc)(int,int);

int product(int u, int v) {
return u*v;
}

t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456

关于c++ - typedef 函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56126116/

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