typedef-函数别名

    143

    在 c/cpp 中可以使用 typedef 来给一个类型搞个别名:

    typedef int myint;
    
    // 下面 a 和 b 的类型都可以说是 int
    int a;
    myint b;
    

    而函数别名的语法有些不同:

    int max(int, int);
    typedef int (* max_func_t)(int, int);
    
    max_func_t max_alias;
    
    // 下面的两个调用是等价的
    max(1, 2);
    max_alias(1, 2);
    

    将函数指针作为参数时,使用函数别名可以大大提高代码的可读性:

    int max(int, int);
    
    // 不使用别名,接收一个函数指针并调用
    void test(int (* max_func)(int, int)) {
        max_func(1, 2);
    }
    test(max);
    
    typedef int (* max_func_t)(int, int);
    
    // 使用别名,接收一个函数指针并调用
    void test(max_func_t max_func) {
        max_func(1, 2);
    }
    test(max);
    

    函数别名的语法一直让我很奇怪写着也很难受,今天又碰到要将函数作为参数传递的情况,于是谷歌了一下,其实可以这样理解:

    // 正确语法
    typedef int (*max_func_t)(int, int);
    //       ^        ^          ^
    //    返回类型   别名        参数
    
    // 错误语法,但有助于理解(强行理解)
    typedef int (*) (int, int) max_func_t;