C 返回不带typedef的函数指针

C 返回不带typedef的函数指针,c,C,我正在尝试编写一个函数,它返回一个函数指针,而不使用任何typedef。返回的函数需要可分配给 static int (*compare_function)(int a); 这是最好的/唯一的方法吗 static static int (*compare_function)(int a) assign_compare_function(int a,...,char* z){ //blah } 有两种静态,因为我希望赋值函数也是静态的。您定义的第一个问题是,编写静态静态没有任何意义。这是因为s

我正在尝试编写一个函数,它返回一个函数指针,而不使用任何typedef。返回的函数需要可分配给

static int (*compare_function)(int a);
这是最好的/唯一的方法吗

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

有两种静态,因为我希望赋值函数也是静态的。

您定义的第一个问题是,编写
静态静态
没有任何意义。这是因为
static
是一个存储限定符,它本身不是类型的一部分。第二个问题是两个函数都需要一个参数列表

你可以这样写:

int (*compare_function(void))(int a) {
    ...
}
或者,您可以使
compare\u功能
静态:

static int (*compare_function(void))(int a) {
    ...
}
其中任何一个都将返回一个类型为
int(*)(int a)
的对象,这正是您想要的。为了澄清,在不使用
typedef
的情况下,这是编写返回函数(不包括someo)的函数的唯一方法

编写
静态
毫无意义。想象一下,编写如下内容:

// no
typedef static int SInt;
这也没有任何意义,所以当你有一个变量时:

static int (*compare_function)(int a);

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

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

int compare_function(int a);

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

关键字static是范围限定符。它不是类型本身的一部分

int (*compare_function)(int a);
这指定了获取int'a'并返回int的函数。您可以在此语句之后使用处的compare_函数来引用该函数签名的类型

您可以指定它:

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

compare_function = my_compare_function;

请注意,我的_compare_函数有静态限定符。

这行得通吗?试一下,告诉我们..@EugeneSh.Sorry:)我的意思是,这是正确的/惯用的方法吗?为什么不使用
typedef
?如果它是一个接口的一部分,正确的方法是使用它。我能想到的避免使用
typedef
的唯一原因是因为这是一个强加了这样一个要求的学术练习。可以帮助您理清C声明的含义。您的编译器可以帮助您确认答案。您说得很对,但您似乎没有抓住问题的关键,即如何为返回类型为该函数指针类型的函数编写签名。@JohnBollinger:youcanwrite
int(*compare_function)(int a)
“不包括这一点吗?我很困惑你为什么认为这不能回答这个问题。如果我错了,请纠正我@DietrichEpp-但你基本上是在确认他的第一行代码可能是返回函数指针的“最佳”或最“惯用”的方式,而不是返回
typedef
?不,你的答案没有回答这个问题。给定您在回答结束时声明的变量
compare\u函数
,问题不在于如何声明该变量可以指向的函数,而在于如何声明其返回值可以分配给该变量的函数。@JohnBollinger:抱歉,输入错误,已修复。