Typedef函数指针?

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

typedef void(*FunctionFunc)();

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

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

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

typedef是一种将名称与类型关联的语言构造。
例如,您使用它的方式与使用原始类型的方式相同

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

像这样使用它们

myinteger i;//相当于int i;
mystring s;//与char*s相同;
myfunc f;//同样编译为void(*f)();

如您所见,您可以用上面给出的定义替换typedefed名称。

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

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

回答你的三个问题

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

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

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

例如:

类型定义int(*t_somefunc)(int,int);
整数乘积(整数u,整数v){
返回u*v;
}
t_somefunc afunc=&产品
...
intx2=(*afunc)(123456);//调用product()计算123*456

发表评论