C 返回不带typedef的函数指针
我正在尝试编写一个函数,它返回一个函数指针,而不使用任何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
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:youcanwriteint(*compare_function)(int a)
“不包括这一点吗?我很困惑你为什么认为这不能回答这个问题。如果我错了,请纠正我@DietrichEpp-但你基本上是在确认他的第一行代码可能是返回函数指针的“最佳”或最“惯用”的方式,而不是返回typedef
?不,你的答案没有回答这个问题。给定您在回答结束时声明的变量compare\u函数
,问题不在于如何声明该变量可以指向的函数,而在于如何声明其返回值可以分配给该变量的函数。@JohnBollinger:抱歉,输入错误,已修复。