APIs, errores y pruebas
11 pasos en 4 series de C.
Cómo escribir C que otras personas puedan usar. Firmas de funciones que dicen lo que quieren decir, punteros opacos para encapsular, retornos de error y rutas de limpieza que no dejan fugas en la tercera salida anticipada.
Once pasos sobre la diferencia entre C que compila y C que merece estar en una biblioteca.
Firmas
- Códigos de error y parámetros de salidaLa convención de C: retornar éxito o falla y entregar el valor a través de un puntero.
- Cláusulas de guardaValidar arriba y retornar temprano, para que al cuerpo no le quede anidamiento.
- Interfaces acotadasRecibir el búfer y su capacidad juntos, y reportar cuánto se necesitaba.
- APIs de lectura y de escrituraEl const en la firma dice si una función cambiará lo que le entregas.
Encapsulación
- Handles opacosEl header declara un tipo incompleto, así que quien llama no ve los campos.
- Pares init y destroyCada recurso recibe un init que puede fallar y un destroy que no.
- Mantener privadas las auxiliaresstatic a nivel de archivo esconde una función de toda otra unidad de traducción.
Errores y limpieza
- Un enum de erroresLos códigos de error con nombre se leen mejor que números mágicos, y mapean a mensajes.
- Una salida, todo liberadoEl patrón adquirir-verificar-goto, escrito completo.
Bis
- Tests a base de assertsUna prueba es una función llena de asserts, llamada desde main. Sin framework.
- adt_stack.cUn tipo de dato abstracto bien hecho: handle opaco, enum de errores, pruebas en main.