C传递函数调用作为变量

时间:2013-06-20 21:09:52

标签: objective-c c

这可能是一个相当不寻常的问题(我确定这个标题很容易引起误解),但在C / Objective c中是否有可能将实际的函数调用传递给另一个函数而不改变签名?这意味着一旦我尝试获取变量的值,就会调用该函数? (我已尝试使用函数指针,但当然为此我需要更改签名)..

为了更好地理解这里我想要实现的(虚构的)例子。 (请注意,foo必须被视为私有API)

int foo(double a) {
    print(a);
    print(a);
    print(a);
}


double globalCount = 1.0;
double count() {

    return globalCount++;

}

int main() {
    foo(globalCount());   // I know this syntax would evaluate globalCount() first...
}

预期产出:

1
2
3

如果一些糟糕的伏都教可以让这件事发生,那我真的很高兴......

2 个答案:

答案 0 :(得分:0)

这应该做:

typedef double (*FUNC_PTR)(void);

void foo ( FUNC_PTR funcPtr )
{
  print( (*funcPtr)( ) );
  print( (*funcPtr)( ) );
  print( (*funcPtr)( ) );
}

double globalCount = 1.0;
double count() {
    return globalCount++;

}

int main() {
    foo( &count );
}

答案 1 :(得分:0)

您可以使用指向double count(void)函数的函数指针 声明这样一个接受另一个函数double(*func)(void)的函数,以获取有关函数指针的更多信息,请参阅:http://www.newty.de/fpt/intro.html#what

#include<stdio.h>

/*takes a pointer to function return type changed to void*/
void foo( double (*func)(void) ) {
    printf("%1.0f\n",func() );
    printf("%1.0f\n",func() );
    printf("%1.0f\n",func() );
}


double globalCount = 1.0;
double count(void) {

    return globalCount++;

}

int main() {
    foo( &count );
    return 0;  
}