2016-04-03 14 views
0

小さなテストフレームワークコンパイル時に関数のリストを作成しようとしています。 マクロでテスト関数を作成していて、追加されたtestxをmainからすべて呼び出せるようにしたいと考えています。コンパイル時に関数リストを作成する

#define ADD_TEST(X) my_test_##X 

ADD_TEST(foo){ 
    ASSERT_EQ(1, 2); 
} 
ADD_TEST(bar){ 
    ... 
} 

int main (void){ 
    something_calling_all_my_tests(); 
    return 0; 
} 

C++での完全な例はhttp://pastebin.com/C5mmcYDD

よろしく

+0

リンカマップファイルから取得します。 –

+0

は、私が探しているものではない第三者のソフトウェアを必要とするでしょう – trax

+0

実行可能プログラムを作成するためには、 "サードパーティのソフトウェア" - リンカ - が必要になります。言い換えれば、この目的のために使用するかどうかにかかわらず、使用する必要があります。 – Peter

答えて

0

属性((コンストラクタ))私たちは、メインの前に関数を実行し、各テスト関数を登録することができますを使用するだろう。それはコンパイル時ではありませんが、今のところ私のニーズに合っています。

#define ADD_TEST(TEST_NAME) void test_##TEST_NAME (void);  \ 
    void t_##TEST_NAME##_registerFunction (TestFunction test_##TEST_NAME)__attribute__ ((constructor)); \ 
    void t_##TEST_NAME##_registerFunction (TestFunction test_##TEST_NAME){n++; printf("running %s\n", #TEST_NAME);} \ 
    void test_##TEST_NAME (void) 
関連する問題