Typedef函数指针?

杰克·哈文

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

typedef void (*FunctionFunc)();

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

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

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

e2-e4

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)();

如您所见,您可以将typedef名称替换为上面给出的定义。

困难在于在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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章