Pour clarifier: Qu'est-ce que vous vous demandez pourquoi SQLite fait ce qui précède au lieu de le faire:
fichier d'en-tête:
typedef struct sqlite3_stmt sqlite3_stmt;
fichier C:
struct sqlite3_stmt {
/* lots of members */
};
int sqlite3_step(sqlite3_stmt *pStmt) {
/* do stuff with pStmt... */
}
(C'est la forme canonique du motif "pointeur opaque" lié à la réponse de KennyTM.)
Le seul bon raison pour laquelle je peux penser à ce que fait SQLite ce qu'il fait est le suivant:
Le code backend, je spécule, est venu avant l'API et a utilisé le nom Vdbe
- le nom signifie probablement quelque chose lié à la mise en œuvre le long de la lignes de "l'entrée de la base de données virtuelle" (deviner sauvagement ici). Quand le temps est venu de créer l'API, quelqu'un s'est rendu compte que le paramètre requis par sqlite3_step
était un Vdbe
mais que ce n'était pas exactement un nom qui aurait beaucoup de sens pour l'utilisateur de l'API. Par conséquent, du point de vue de l'utilisateur, un Vdbe
est appelé sqlite3_stmt
.
Le point ici est donc de faire la différence entre deux vues du même élément: Le backend pense en termes de Vdbe
s (quels qu'ils soient) parce que ce nom qui fait sens dans le contexte de la mise en œuvre. L'API parle de sqlite3_stmt
s parce que c'est un nom qui a du sens dans le contexte de l'interface . Edit: Comme le souligne Amarghosh, pourquoi ne pas le faire pour obtenir le même résultat?
typedef struct Vdbe sqlite3_stmt;
KennyTM points out a good possible reason (s'il vous plaît le vote, je ne veux pas siphonner son représentant ici): VDBE est seulement l'un de plusieurs backends possibles; l'interface utilise un "générique" sqlite3_stmt
, et il est ensuite converti à tout ce que le backend utilise pour l'implémenter.
Il n'y a pas de bonne raison. Mais beaucoup de gens font beaucoup de choses stupides en C, même dans de grands projets bien connus. –
À R .: Vous n'irez pas très loin avec ce genre d'attitude dédaigneuse. sqlite est un projet mature bien connu qui est réputé pour sa qualité. Il est probable que D. Richard Hipp sait ce qu'il fait avec le code. –