我试图编写一个不使用任何typedef而返回函数指针的函数。返回的函数需要分配给
static int (*compare_function)(int a);
这是最佳/唯一的方法吗?
static static int (*compare_function)(int a)
assign_compare_function(int a,...,char* z){
//blah
}
有两种静态,因为我希望分配器功能也是静态的。
答案 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具有静态限定符。