Mètodes

42 (I): libft, construint la caixa d''eines

El primer projecte de 42: reescriure funcions bàsiques de C sense llibreries.

2 min de lectura

El primer que aprens a 42 és que no hi ha res preparat. Ni printf, ni strlen, ni cap llibreria (una col·lecció de funcions que altres ja han escrit): si ho necessites, te l'escrius. I la primera entrega del curs, libft, és justament això: reescriure una bona part de la llibreria estàndard de C des de zero. Un avís abans de començar: per norma de l'escola no comparteixo codi dels projectes, així que en aquesta sèrie explicaré el plantejament, els problemes i el que en vaig treure, mai la solució.

El problema

Sobre el paper, tornar a escriure funcions conegudes sembla feixuc però senzill. A la pràctica, és el projecte on més fonaments he après de cop. La llista demanada superava la cinquantena de funcions: memòria (memset, memcpy, calloc...), cadenes de text, conversió de caràcters i, com a part opcional, llistes enllaçades (cadenes de dades on cada peça apunta a la següent). Cada una amb els seus casos límit: cadenes buides, blocs que no quadren, mides que se'n van del que demanes. I per damunt de tot, el veritable tema de fons: entendre malloc de debò —quin moment reserva memòria, quan cal alliberar-la i què passa quan t'oblides.

Com el vaig abordar

Em vaig repartir la feina en tres blocs: primer les funcions de memòria i de cadenes més curtes, després les que construeixen coses noves (substr, split, strjoin, itoa), i al final el bonus amb les llistes enllaçades. Tot es compila en una llibreria estàtica (un fitxer que s'adjunta al programa en compilar-lo) amb un Makefile —el fitxer que diu com compilar-ho tot—, i això també va ser aprenentatge: regles, dependències i un fclean que ho deixi tot net. A mesura que avançava provava cada funció amb un main de proves propi, perquè una funció que compila no és una funció que funcioni. El repositori, 42_libft, va quedar amb el codi a src/, la capçalera a include/ i el Makefile a l'arrel; després el vaig integrar dins del repositori general del curs, 42_Cursus.

Què en vaig treure

Dues coses. La primera: mai més miraré strlen amb els mateixos ulls. Darrere de cada funció banal hi ha decisions sobre memòria i tipus que ara entenc. La segona: disciplina. La norma de l'escola obliga a un estil estricte i a gestionar tota la memòria sense fuites (memòria que es reserva i no es retorna); al principi sagna, però al cap d'un parell de setmanes ja ho fas sense pensar. libft no té res de glamurós: ningú veurà aquesta llibreria fora de classe. Però és la caixa d'eines amb què he escrit tot el que va venir després —el següent pas va ser llegir fitxers amb get_next_line, llegir fitxers línia a línia—, i se'n nota la qualitat cada vegada que un projecte nou compila a la primera.