Para aclarar: Lo que estamos pidiendo es la razón por SQLite hace lo anterior en lugar de hacer esto:
Archivo de cabecera:
typedef struct sqlite3_stmt sqlite3_stmt;
archivo C:
struct sqlite3_stmt {
/* lots of members */
};
int sqlite3_step(sqlite3_stmt *pStmt) {
/* do stuff with pStmt... */
}
(Esto es la forma canónica del patrón de "puntero opaco" vinculado en la respuesta de KennyTM.)
El único bien La razón por la que puedo pensar por qué SQLite hace lo que hace es la siguiente:
El código del servidor, estoy especulando, vino antes de la API y usó el nombre Vdbe
- el nombre probablemente significa algo relacionado con la implementación a lo largo del líneas de "entrada de la base de datos virtual" (adivinando salvajemente aquí).
Cuando llegó el momento de crear la API, alguien se dio cuenta de que el parámetro requerido por sqlite3_step
era Vdbe
pero que este no era exactamente un nombre que transmitiera mucho al usuario de la API. Por lo tanto, desde el punto de vista del usuario, un Vdbe
se conoce como sqlite3_stmt
.
El punto aquí es, entonces, para diferenciar entre dos vistas del mismo material: The back-end piensa en términos de Vdbe
s (cualesquiera que sean), porque eso es un nombre que tenga sentido en el contexto de la aplicación. La API habla de sqlite3_stmt
s porque es un nombre que tiene sentido en el contexto de la interfaz .
Editar: Como señala Amarghosh, ¿por qué no hacer esto para lograr el mismo efecto?
typedef struct Vdbe sqlite3_stmt;
KennyTM points out a good possible reason (por favor, le votar, yo no quiero desviar su representante aquí): VDBE es sólo uno de varios backends posibles; la interfaz usa un sqlite3_stmt
"genérico", que luego se convierte en lo que el programa de fondo utilice para implementarlo.
No hay una buena razón. Pero mucha gente hace muchas cosas estúpidas en C, incluso en proyectos grandes y conocidos. –
A R .: No llegarás muy lejos con ese tipo de actitud desdeñosa. sqlite es un conocido proyecto maduro que tiene fama por su calidad. Es probable que D. Richard Hipp sepa lo que está haciendo con el código. –