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