这可能是一个相当不寻常的问题(我确定这个标题很容易引起误解),但在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
如果一些糟糕的伏都教可以让这件事发生,那我真的很高兴......
答案 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;
}