所以我在C中做了一些工作,我在汇编和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
然后在来电者: 包括“headerfile.h” //包括上述头文件 //调用者定义_ Ç _FUNC 定义__C_FUNC callTheRightFunction(m,p,& getstate); 但是由于我在头文件中包含了头文件,当它们都没有被定义时,它可能根本不包含任何头文件,因此会生成运行时错误。 任何建议朝着正确的方向将不胜感激。在此先感谢你们!
使用预处理器指令:像'#ifdef' – mshsayem
不要在全局名称中使用前导下划线。它们保留给编译器和系统实现。如果你想在某一天与C++兼容,不要使用双下划线。 –