generische Programmierung mit Macros



  • Hallo,

    Beispiel "tree.h":
    http://attractivechaos.wordpress.com/2008/09/02/generic-programming-in-c/

    die Datei includiert: #include <sys/cdefs.h>

    Ich habe hier VS2005, diese Datei gibt es wohl auch nur bei gcc.

    Beim Kompilieren des Bsp. erhalte ich jedoch unter VS2005 immer die Meldung

    Verweis auf nicht aufgelöstes externes Symbol "_int32_RB_INSERT" in Funktion "_main".

    bei der Zeile

    main(){
    RB_INSERT(int32, x, y);
    }

    Interprtiert der MSC die Macros anders als der gcc ?

    Viele Grüße, RB



  • Diese tree.h wird dort nur als Beispiel genannt, gehört aber selbst zu freebsd o.ä. und hat wahrscheinlich irgendwelche Abhängigkeiten. Du sollst ja nicht versuchen, sie zu kompilieren, sondern dir darin nur anschauen, wie dort generische Funktionen gemacht werden.



  • hallo, ja danke, ja nein 😉 also ... SPLAY_PROTOTYPE im Text hatte ich
    erst überleden und nun mal ein ganz einfaches sinnfreies Beispiel nachgestellt.

    #include <stdlib.h>
    #include <stdio.h>
    
    #define GENERIC_PROTO(name)						\
    void*											\
    name##_GENERIC_print(char* name)				\
    {												\
    printf("%s", name);								\
    return NULL;									\
    }
    
    #define print_generic(name)	name##_GENERIC_print(name)
    
    GENERIC_PROTO(demo)
    int main( int argc, char* argv[] )
    {
    	char* demo = "demo";
    	print_generic(demo);
    	return 0;
    }
    

    um tree.h zu verwenden muss man also wie zu sehen erst verwenden ("aufrufen")
    SPLAY_PROTOTYPE .

    Dabei werden die eiugentlichen Funktionen in den Quellcode eingebunden

    NAMETREE001_Funktion(....)

    oder

    NAMETREE002_Funktion(....) für einen 2. Baum z.B.

    Das hatte ich nicht beachtet und von daher waren immer diese nicht aufgelösen
    Symbole vom Linker bemängelt wurden. Funktioniert unter MSC also auch 😉

    Viele Grüße


Anmelden zum Antworten