Alcune delle funzioni in stdio sembrano avere il flusso come ultimo argomento, ad esempio:Perché alcune funzioni in stdio hanno lo stream come ultimo argomento?
char *fgets(char *restrict, int, FILE *restrict);
int fputs(const char *restrict, FILE *restrict);
size_t fread(void *restrict, size_t, size_t, FILE *restrict);
size_t fwrite(const void *restrict, size_t, size_t, FILE *restrict);
mentre alcuni hanno come primo argomento:
int fgetpos(FILE *restrict, fpos_t *restrict);
int fseek(FILE *, long, int);
Perché questa incongruenza? Queste funzioni sono state aggiunte in momenti diversi nell'evoluzione della libreria standard? In quel caso che erano i primi e perché la convenzione è cambiata?
mi rendo conto che è più o meno il necessario per fprintf
con gli amici per avere il FILE*
prima (o almeno all'inizio) a causa della puntini di sospensione (e per fclose
e simile ad avere per primo, e l'ultimo).
La libreria C è estremamente coerente nella regola che assolutamente nulla della sua API è coerente. –
Un altro esempio è fread, in cui gli argomenti sono fwrite: size, count, mentre calloc, qsort, bsearch hanno questi argomenti al contrario. – 2501
Almeno sono coerenti nel senso che i metodi posizionali si aspettano il primo parametro come l'handle del file, mentre i metodi i/o con il buffer si aspettano prima il buffer. –