そのため、アセンブリと 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 define __C_FUNC callTheRightFunction(m,p,&getstate); しかし、ヘッダーファイルが定義されていないときに最初にヘッダーファイルを含めるため、おそらくそれらのいずれも含まれず、ランタイムエラーが生成されます。正しい方向への提案をいただければ幸いです。よろしくお願いします!