为函数返回函数内联typedef

时间:2018-01-25 04:10:29

标签: c typedef

是否可以内联返回​​函数的函数的返回签名?

工作版

typedef返回函数签名

CourseId1

在结构中定义的函数

typedef void (*ptrFunc)(int);

尝试内联:

struct Observer {
    ptrFunc (*getMethod)(struct Test *test);
};

2 个答案:

答案 0 :(得分:3)

函数无法返回函数。但是,是的,您可以使用函数指针返回函数指针,而不使用typedef

以下是导航这些类型的技巧:

  1. 您会注意到ptrFunc (*getMethod)(struct Test *test);看起来像变量声明ptrFunc someVar;。除了代替someVar我们的“变量”具有有趣的名称(*getMethod)(struct Test *test)

  2. 如果您想在不使用typedef的情况下声明someVar类型的变量ptrFunc,则可以编写void (*someVar)(int);

  3. 因此,如果您要声明类型为(*getMethod)(struct Test *test)的变量ptrFunc,则需要编写void (*(*getMethod)(struct Test *test))(int);

    看看它是如何工作的?我刚刚将someVar更改为(*getMethod)(struct Test *test)

  4. 我们可以使用像cdecl.org这样的工具仔细检查一下(注意 - cdecl不喜欢具有名称的test参数)。

  5. 顺便说一下,这个技巧也适用于其他类型 - 例如,指向函数的指针,这些函数返回指向函数指针数组的指针。

    但严重的是,只需使用typedef来保持自己的理智。

    附录:

    如果您想将void (*(*getMethod)(struct Test *test))(int);放入结构中,请将其写为:

    struct Observer {
        void (*(*getMethod)(struct Test *test))(int);
    };
    

    ...但我确信你足够聪明,可以解决这个问题。

答案 1 :(得分:1)

使用cdecl程序将英语翻译成C. Available online too

cdecl> declare getMethod as pointer to function (pointer to struct test) returning pointer 
       to function (int) returning void;
void (*(*getMethod)(struct test *))(int )