typedef void(* print_type)(const char *);

时间:2017-12-12 19:40:28

标签: c++ c function-pointers typedef

在探索一些代码时,我在头文件中找到了以下内容:

typedef void (*print_type) (const char*);

这条线是什么意思?我知道typedef用于表示某个字词,但为什么要使用void

3 个答案:

答案 0 :(得分:2)

这是什么?

typedef void (*print_type) (const char*);

typedef告诉编译器数据类型print_type是一个指向函数的指针,该函数接受const char*作为参数并且不返回值。

...它与DLL无关

功能指针

我们声明一个函数如下:

ret-type identifier(parameters)

int f(double x)

鉴于对于声明为int a的东西,指向它的指针被声明为int *a(在数据类型之后添加*),有人想出一种声明的方法是很自然的函数指针如下:

int *f(double);

这里有一个问题。这实际上是一个函数的声明,它接受double作为参数并返回int*

我们需要明确告诉编译器它不是一个返回指针的函数;相反,它是一个指向函数的指针。我们通过在*f周围放置括号(括号具有更高的优先级)来完成此操作。

int (*f)(double);

让我们再看一个例子:

int* myfunc(int a[], char b);

要声明一个指向具有上述签名的函数的函数指针数组,我们写:

int* (*ptr[])(int[], char);

有一种称为Spiral Rule的技巧,它对于找出复杂的数据类型非常有用。

使用typedef

使用函数指针可能会变得非常复杂。为了保持代码的可读性和整洁性,我们更喜欢使用typedef为函数指针类型提供单个符号类型名称。

typedef int (*ptrFunc_t)(int, char);

这允许您声明一个指向函数的指针,该函数接受intchar作为参数,并返回int,如下所示: ptrFunc_t myptr;

答案 1 :(得分:2)

此:

void foo(const char*);

foo声明为接受const char*参数并返回void的函数(即,它不返回任何内容)。 (它必须在某处定义,以便您能够调用它。)

此:

void (*bar)(const char*);

bar定义为指针对象。它是指向与上面的foo类型相同的函数的指针。

添加typedef关键字,即:

typedef void (*print_type)(const char*);

定义print_type,不是作为指针到函数类型的对象,而是作为指针到函数类型的别名。

答案 2 :(得分:0)

它正在创建一个指向函数的指针的typedef,该函数接受一个const char指针参数并且什么都不返回。

这样的typedef在用于动态加载的库中很常见(即使用LoadLibrary等),因为你必须加载到实际函数的函数指针,而不是像加载时一样直接使用函数名。联。