为什么函数指针的typedef与常规的typedef不同?

时间:2015-08-23 06:36:44

标签: c pointers function-pointers typedef

typedef经常有效:typedef <type> <type_alias>。但是函数指针的typedef似乎有不同的结构:typedef int (*fn)(char *, char *); - 没有类型别名,只有一个函数签名。

以下是示例代码:

#include <stdio.h>

typedef void (*callback)(int);

void range(int start, int stop, callback cb) {
    int i;
    for (i = start; i < stop; i++) {
        (*cb)(i);
    }
}

void printer(int i) {
    printf("%d\n", i);
}

main(int argc, int *argv[])
{
    if (argc < 3) {
        printf("Provide 2 arguments - start and stop!");
    }

    range(atoi(argv[1]), atoi(argv[2]), printer);
}

那么 - 为什么函数指针的typedef不同?

2 个答案:

答案 0 :(得分:4)

使用typedef定义函数指针类型的语法遵循与定义函数指针相同的语法。

int (*fn)(char *, char *);

fn定义为指向函数...

的指针
typedef int (*fn)(char *, char *);

fn定义为指向函数...

的指针的类型

答案 1 :(得分:1)

C声明语法比type identifier复杂得多,例如

T (*ap)[N];             // ap is a pointer to an N-element array
T *(*f())();            // f is a function returning a pointer to
                        // a function returning a pointer to T

从语法上讲,typedef被视为存储类说明符,如staticextern。因此,您可以为上述每个内容添加typedef,并提供

typedef T (*ap)[N];     // ap is an alias for type "pointer to N-element array
typedef T *(*f())();    // f is an alias for type "function returning
                        // pointer to function returning pointer to T"