Zugriff auf MySQL über C-API
Andreas Korthaus
- sonstiges
Hallo!
Ich habe da noch ein paar gundsätzliche Verständnisschwierigkeiten. Zum einen sind die C Funktionen 1:1 in C++ übertragbar?
Und nochwas,da wird in dem C-Programm einfach auf den MySQL-header verwiesen, also #include <mysql.h>, wo kommt der denn her? Woher soll mein g++ wissen, wo der Header zu finden ist? Der gehört wohl nicht zur Standardausstattung des Compilers! Da kann man ja z.B. eine mysql-c++.h auf der Homepage runterladen, muß ich dann für C++ besser diesen verwenden? Oder muß ich die beim kompilieren jedesmal "manuell" linken, halt über -L/pfad/zu/mysql-c++.h, udn was ist wenn das mit mehreren headern dieses Problem gibt?
Grüße
Andreas
Hallo,
Zum einen sind die C Funktionen 1:1 in C++ übertragbar?
Im Grunde ja, das binäre Layout mal weggenommen. C++ hieß ursprünglich "C mit Klassen". Wobei es hier nur um die Sprache und deren Bestandteile geht, also nicht um die OS-Architektur des Zielsystems. Soll heißen, dass du keine C-Programme für Mac nach C++ für Windows portieren kannst. Weiterhin wird es dir selten gelingen ein C-Programm 1:1 auf C++ zu übertragen, sei es die syntaktische oder logische Ebenen, welche dazwischen funkt. Jedenfalls ist eine C-Funktion auch eine Funktion in C++, wobei aber die dahinterstehende Logik von den Mitteln abhängig ist. Es sind also die Vorraussetzungen, wie z.B. die Bibliotheken, die sich unterscheiden.
Und nochwas,da wird in dem C-Programm einfach auf den MySQL-header verwiesen, also #include <mysql.h>, wo kommt der denn her?
Die Suchreihenfolge für diese Instruktion wird in deinem Handbuch beschrieben. Normalerweise stehen die spitzen Klammern für das Default-Include-Verzeichnis, wohingegen Anführungszeichen für das aktuelle Verzeichnis stehen. Bei der ersten Variante wird, nachdem die Datei nicht gefunden wurde, im System- oder im aktuellen Verzeichnis gesucht. Das ist aber vom Compiler abhängig.
Woher soll mein g++ wissen, wo der Header zu finden ist?
Wenn er ihn nicht findet, dann weiß er auf jedenfall das er nicht da ist, wo er ihn vermutet hat;)
Der gehört wohl nicht zur Standardausstattung des Compilers!
Genausowenig wie <iloveyou.h> oder <microsoft.h>, wenn es die denn gäbe. Es ist eine herstellerspezifische Datei um deren Produktfunktionalität zu implementieren.
Da kann man ja z.B. eine mysql-c++.h auf der Homepage runterladen,
muß ich dann für C++ besser diesen verwenden?
Besser als welche Header-Datei? C++ ist sprachlich gesehen ein Unterschied zu C, also Syntax*1 (Erweiterung gegenüber C) und Semantik*2 (Konzept, Klassen). Da ist es wohl besser man nimmt die passende Datei, weil letztendlich die einzelnen Funktionen, die du schreibst, und deren zugrundeliegenden Hilfsmittel sprachspezifische Merkmale aufweisen.
Oder muß ich die beim kompilieren jedesmal "manuell" linken, halt über -L/pfad/zu/mysql-c++.h, udn was ist wenn das mit mehreren headern dieses Problem gibt?
Du mußt die Header-Datei nur in das richtige Verzeichnis legen. Wo geanu kommt letztendlich auf die Angabe für die Einbindung drauf an, weil
#include <../meinelib/headerX.h>
#include <meinelib/headerX.h>
#include <headerX.h>
#include "headerX.h"
auf drei unterschiedliche Verzeichnisse verweisen, aber mitunter zum selben Ergebnis führen und zwar dann, wenn dein Complier schlauh genug ist deine Fehler zu kompensieren (keine Kritik).
hth
achim
*1) Sprachmittel
*2) Bedeutung der Sprachmittel
PS: Das lesen des Beitrags erfolgt auf eigene Gefahr. Fehler sind nicht ausgeschlossen.
Hallo!
Vielen Dank! Ganz interessant in diesem zusammenhang ist auch http://www.mysql.com/documentation/mysql++/4_Tutorial.html, da werde ich mich jetzt einfach mal durcharbeitet!
Grüße
Andreas