所以我在 C 中做一些工作,我在汇编和 C 中都实现了相同的功能,我想比较 C 和汇编实现的性能。现在,我希望能够有条件地编译和调用该函数,即我想创建一个函数,该函数将充当调用者和我想要调用的正确函数之间的接口。不知何故,我不知道该怎么做。我在考虑以下几点:
//header file containing the C definition and the assembly definition
void getstate(state* m, int* values);
extern void kalmanstate(state* m, int* values);
然后调用者可以包含上述头文件并传递 &getstate 或 &kalmanstate。
void callTheRightFunction(state* m, int* values, void *fnptr(state*,int*))
{
*fnptr(m,values);
}
然而,这样做的问题是 getstate 和 kalmanstate 都将被编译,这违背了我的模拟目的。对我来说,这听起来不是我想要的包装器的最佳实现。我知道 C 中存在条件执行,但我将如何使用它来编译正确的函数?我的意思是如果我在头文件中做这样的事情:
#ifdef __C__FUNC
void getstate(state* m, int *values);
#endif
#ifdef __kalman
void kalmanstate(state *m, int *values)
#endif
然后在调用者中: include "headerfile.h" //包含上面的头文件 //调用者定义_C _FUNC 定义__C_FUNC callTheRightFunction(m,p,&getstate) ; 但是由于我在开头包含头文件时没有定义它们,所以它可能根本不会包含它们中的任何一个,因此会产生运行时错误。任何对正确方向的建议将不胜感激。提前谢谢各位!