Il peut ou peut ne pas être une différence dans les performances. Il y a une différence sémantique.
fread(a, 1, 1000, stdin);
essaie de lire 1000 éléments de données, chacun de qui est de 1 octet de long.
fread(a, 1000, 1, stdin);
essaie de lire 1 de l'élément de données qui est de 1000 octets.
Ils sont différents parce qu' fread()
renvoie le nombre d'éléments de données qu'il a pu lire, pas le nombre d'octets. Si il arrive à la fin de fichier (ou une condition d'erreur) avant de lire l'intégralité de 1000 octets, dont la première version a pour indiquer exactement le nombre d'octets à lire; le deuxième, juste échoue et renvoie 0.
Dans la pratique, il est probablement juste va appeler un niveau inférieur de la fonction qui tente de lire 1000 octets et indique combien d'octets réellement lus. Pour les plus grands lit, il peut faire plusieurs niveau inférieur appels. Le calcul de la valeur renvoyée par fread()
est différent, mais la charge de calcul est trivial.
Il peut y avoir une différence si la mise en œuvre peut dire, avant de tenter de lire les données, qu'il n'y a pas suffisamment de données à lire. Par exemple, si vous lisez un de 900 octets du fichier, la première version de lire tous les 900 octets et retour 900, tandis que le second pourrait pas pris la peine de lire quoi que ce soit. Dans les deux cas, le fichier indicateur de position est avancé par le nombre de caractères lus, c'est à dire, 900.
Mais en général, vous devriez probablement choisir comment appeler sur la base de quelles informations vous avez besoin. Lire un seul élément de données si une lecture partielle n'est pas mieux que de ne pas le lire du tout. Lire en petits morceaux si partielle de lit sont utiles.