Funzioni Standard.. poco Standard
Proprio poco fa stavo parlando in chat con Dani, mentre io insultavo quelli che hanno creato la strcmp ( in quanto se gli si passa uno dei due parametri a NULL fa andare il programma in Segmentation Fault che è una bellezza ), mi ha detto che la strcmp oltre a fare il semplice confronto tra le due stringhe restituisce anche la differenza tra i caratteri, e proprio per questo lui l’aveva utilizzata per riordinare alfabeticamente i pacchetti in slackyd.
Allora non sapendo questa cosa da niubbo della situazione mi son messo a fare un test:
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> #include <string.h> int main(int argc, char **argv) { if ( argc < 3 ) return 1; printf("Diff: `%d'\n", strcmp(argv[1], argv[2])); return 0; } |
Benissimo lo vado ad avviare e mi restituisce solo 0 ( uguali ), 1 o -1 ( non uguali ).. dopo vari attimi di stupore da parte sua, va a provare lo stesso identico codice e le stesse identiche stringhe passate come parametro sul suo computer e la funzione lì restituiva davvero la differenza tra le due stringhe!
Ora mi domando cosa renda così variabile una funzione standard che dovrebbbe avere lo stesso funzionamento su tutti i computer del mondo. La versione delle libc comunque era uguale giusto per cronaca. Da notare comunque anche che ho provato la strcasecmp che non dovrebbe far parte del C Standard, e restituisce la famosa differenza tra le due!
? Mah..
P.s.: Altra cosa che mi fa incazzare, se si passa un parametro null alla strcmp, o all’atoi perchè cavolo mi deve compromettere tutto il programma? cosa gli costa a quelli che hanno scritto la gnu c library mettere due piccolissime macro del tipo:
1 2 3 4 5 6 | #define return_if_fail(cond) if ( !(cond) ) { \ return; \ } #define return_val_if_fail(cond, val) if ( !(cond) ) { \ return (val); \ } |
per controllare che i parametri non siano nulli? BAH!
Commenti recenti