了解C typedef

Ash*_*hot 12 c c++ types tcl

我试图理解这个来自Tcl文档的代码

typedef int Tcl_DriverOutputProc(
        ClientData instanceData,
        const char *buf,
        int toWrite,
        int *errorCodePtr);
Run Code Online (Sandbox Code Playgroud)

我知道typedef的目的是为现有类型分配替代名称,那么为什么需要将typedef int赋予函数?这怎么用?

Mik*_*our 16

我知道typedef的目的是为现有类型指定替代名称

究竟.函数具有类型,这将Tcl_DriverOutputProc为此函数类型指定名称.函数类型本身就像一个缺少名称的函数编写:

int(ClientData, const char *, int, int *)
Run Code Online (Sandbox Code Playgroud)

并且,与函数声明一样,您可以根据需要包含参数的名称,或将其保留.

这怎么用?

您可以使用指向函数的指针来指定运行时的行为; 例如:

typedef void function();
void hello()   {printf("Hello\n");}
void goodbye() {printf("Goodbye\n");}

int main() {
    function * pf = hello;
    pf(); // prints "Hello"
    pf = goodbye;
    pg(); // prints "Goodbye"
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它允许您编写一个函数来处理TCL输出的某些方面,并告诉TCL使用该函数.

  • @ChristianRau:您也可以使用函数typedef来声明一个函数,尽管在定义函数时仍然需要正常的函数声明语法; 在C++中,函数类型通常用作模板参数(例如`std :: function <void()>`). (2认同)