2016-04-03 6 views
0

für einen kleinen Test-Framework Ich versuche, eine Liste der Funktion zum Zeitpunkt der Kompilierung zu erstellen. Ich erstelle eine Testfunktion mit einem Makro und möchte alle hinzugefügten testx von main aufrufen können.Erstellen Sie eine Liste der Funktion zur Kompilierzeit

#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; 
} 

Ein vollständiges Beispiel in C++ würde http://pastebin.com/C5mmcYDD

Grüße

+0

Holen Sie sie aus der Linker-Map-Datei. –

+0

würde eine Software von Drittanbietern benötigen, um es zu tun, was nicht das ist, was ich suche – trax

+0

Diese "Software von Drittanbietern" - der Linker - wird benötigt, um ein ausführbares Programm zu erstellen. Mit anderen Worten, ob Sie es für diesen Zweck verwenden oder nicht, müssen Sie es verwenden. – Peter

Antwort

0

Mit Attribute ((Konstruktor)) werden wir die Funktion vor dem Haupt laufen können und jede Testfunktion registrieren. Es ist keine Kompilierzeit, sondern passt zu meinen Bedürfnissen.

#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) 
Verwandte Themen