私はC数学ライブラリに取り組んでおり、ほとんどの作業にマクロを使用していますが、現在問題に直面しています。
マクロは次のようになります。
the_macro(a, b, c)
マクロ自体は次のようなことをします。
(a - b > 0) ? error_function : 1
error_functionは、準拠時にユーザーを停止するために使用されます。したがって、の場合、マクロ(a - b > 0)
はtrue
定義のない関数として展開されます。したがって、これによりリンケージエラーが発生します。
すべてが良さそうですが、今日、上司から単体テストを行う必要があると言われたので、マクロをラップする関数を作成しました。
int my_func(int a, int b, int c)
{
return the_macro(a, b, c);
}
ここで問題が発生します。コードはリンケージを渡すことができません。定数の代わりにvarを使用してthe_macroを呼び出すと、これらerror_functions
は.o
ファイルに含まれるため、int a, int b, int c
実行時にすべて既知であるため、マクロ関数のみを呼び出すことができます。定数付き:the_macro(2, 3, 4)
これを回避する方法はありますか?または、このマクロで単体テストを実行するためのより良い解決策はありますか?
編集:
私が取り組んでいるコードは機密情報です...しかし、問題を示す例を作成しました。
#include <stdio.h>
#define the_macro(a, b)\
(a > b)?error_function():1
// Comment out my_func(), then the program will run normaly
// But if you don't comment it out, the linkage error will come out.
void my_func(int a, int b)
{
the_macro(a, b);
}
int main()
{
printf("%d\n", the_macro(1, 10));
return 0;
}
gcc-4を使用しています