我想编写一个钩子函数,只要在我的程序中调用函数来调用函数的参数,就会调用该函数。例如:
void hook(function f, ...){
//some statistics here
f(...);
}
int main(){
foo(1, 2);
}
因此,不是直接调用foo
,而是调用hook而不是foo
作为第一个参数,而1, 2
作为额外参数。
C中有类似的东西吗?我可以用其他任何方式在C中实现这个目标吗?
答案 0 :(得分:0)
宏可以(ab)用于以简单的方式实现这一目标:
void foo( int , int );
void Hook( int a , int b )
{
//do whatever
foo( a , b );
}
#define foo( a , b ) Hook( a , b )
int main( void )
{
foo( 1 , 2 );
}
请注意,这很容易出错,需要仔细阅读。
答案 1 :(得分:-1)
也许这就是你要找的东西?
typedef enum FunctionPointerType_E
{
FPT_Int_IntInt = 1
} FunctionPointerTypes_T
int foo(
int a,
int b
)
{
return(a+b);
}
void hook(
FunctionPointerTypes_T fpt,
void (*function)(void),
...
)
{
int rCode;
int (*fp_Int_IntInt)(int, int);
switch(fpt)
{
case FPT_Int_IntInt:
fp_Int_IntInt = (int(*)(int, int))function;
rCode=(*fp_Int_IntInt)(1,2);
...
}
return;
}
void CallFooByRefrence(void)
{
hook(FPT_Int_IntInt, (void(*)(void))foo, ...);
return;
}