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 auchViele Grüße