所以我在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++兼容,不要使用雙下劃線。 –