Kann mir jemand diese Funktion erklären?
Verfasst: Sa Dez 12, 2009 9:28 pm
Nachdem ich mich gerade in das Thema SQLite hineinarbeite bin ich auf die sqlite3_exec Funktion gestoßen. Diese Funktion ermöglicht es, ein SQL Kommando mit nur einem Befehl auszuführen, wenn die Verbindung erstmal steht.
Die Funktion wird mit folgenden Argument aufgerufen:
Der schwierige Teil für mich ist die Callbackfunktion. Sie dient dazu, die Daten aus der Datenbank zu holen, wenn ein Kommando ausgeführt wird, das ein Ergebnis zurückliefert.
Vier Sachen sind mir nicht in der folgenden Funktion wenig oder gar nicht klar:
1. Was und wozu dient das "void *show_col"? Was ist das für ein Pointertyp und worauf zeigt der?
2. Wozu dient die Typumwandlung des void-Pointers in einen bool-Pointer?
3. Was genau geschieht bei dieser Anweisung: (argv ? argv : "")? Ich habe schon herausgefunden, das es sich um einen Bedingunsoperator handelt, der je nach dem, ob die Bedingung erfüllt ist, entweder den einen oder den anderen Wert zuweist.
4. Wozu dient der Doppelstern wie z. B. char **argv?
Hier die fragliche Funktion:
Die Funktion wird mit folgenden Argument aufgerufen:
Code: Alles auswählen
int sqlite3_exec(
sqlite3*, /* Datenbankhandle */
const char *sql, /* SQL Kommando */
int (*callback)(void*,int,char**,char**), /* Callback Funktion */
void *, /* 1st argument to callback */
char **errmsg /* Hierhin wird eine Fehlermeldung geschrieben */
);
Vier Sachen sind mir nicht in der folgenden Funktion wenig oder gar nicht klar:
1. Was und wozu dient das "void *show_col"? Was ist das für ein Pointertyp und worauf zeigt der?
2. Wozu dient die Typumwandlung des void-Pointers in einen bool-Pointer?
3. Was genau geschieht bei dieser Anweisung: (argv ? argv : "")? Ich habe schon herausgefunden, das es sich um einen Bedingunsoperator handelt, der je nach dem, ob die Bedingung erfüllt ist, entweder den einen oder den anderen Wert zuweist.
4. Wozu dient der Doppelstern wie z. B. char **argv?
Hier die fragliche Funktion:
Code: Alles auswählen
int callback(void *show_col, int argc, char **argv, char **column)
{
bool *show_column(static_cast<bool *>(show_col));
for (int i = 0; i != argc; ++i) {
if (*show_column)
cout << column[i] << ": ";
cout << (argv[i] ? argv[i] : "") << '\n';
}
cout << endl;
return 0;
}