返回没有typedef的函数指针

时间:2016-10-21 17:45:19

标签: c

我试图编写一个不使用任何typedef而返回函数指针的函数。返回的函数需要分配给

static int (*compare_function)(int a);

这是最佳/唯一的方法吗?

static static int (*compare_function)(int a)
assign_compare_function(int a,...,char* z){
//blah
}

有两种静态,因为我希望分配器功能也是静态的。

3 个答案:

答案 0 :(得分:3)

您定义的第一个问题是写static static没有意义。这是因为static存储限定符,并且它本身不属于该类型。第二个问题是你需要两个函数的参数列表。

你可以这样写:

int (*compare_function(void))(int a) {
    ...
}

或者你可以compare_function静态:

static int (*compare_function(void))(int a) {
    ...
}

其中任何一个都将返回类型为int (*)(int a)的对象,这是您想要的。为了澄清,不使用typedef,这是编写一个返回函数的函数的唯一方法(不计算someo

static static毫无意义。想象一下写下这样的东西:

// no
typedef static int SInt;

这也没有任何意义,所以当你有一个变量时:

static int (*compare_function)(int a);

类型为int (*)(int),存储持续时间为静态,链接为内部。

答案 1 :(得分:1)

这是正确返回函数指针的方法:

int compare_function(int a);

int (*assign_compare_function())(int)
{
  return compare_function;
}

答案 2 :(得分:0)

关键字static是范围限定符。它不属于类型本身。

int (*compare_function)(int a);

这指定了int'a'返回int的函数。您可以在此语句后使用compare_function来引用该函数签名的类型。

您可以指定它:

static int my_compare_function(int a)
{
    return a - 10;   // stupid implementation
}

compare_function = my_compare_function;

请注意,my_compare_function具有静态限定符。