Різниця в продуктивності може бути, а може і не бути. Існує різниця в семантиці.
fread(a, 1, 1000, stdin);
намагається прочитати 1000 елементів даних, кожен з яких займає 1 байт.
fread(a, 1000, 1, stdin);
намагається прочитати 1 елемент даних довжиною 1000 байт.
Вони різні, оскільки fread()
повертає кількість елементів даних, які вона змогла прочитати, а не кількість байтів. Якщо він досягає кінця файлу (або умови помилки) перед зчитуванням повних 1000 байт, перша версія повинна вказати, скільки саме байтів вона прочитала; другий просто не вдається і повертає 0.
На практиці, ймовірно, це просто виклик функції нижчого рівня, яка намагається прочитати 1000 байт і вказує, скільки байт вона насправді прочитала. Для більших читань він може здійснювати кілька дзвінків нижчого рівня. Обчислення значення, яке потрібно повернути, fread()
відрізняється, але витрати на обчислення є тривіальними.
Може бути різниця, якщо реалізація зможе сказати перед спробою зчитування даних, що даних недостатньо для зчитування. Наприклад, якщо ви читаєте з 900-байтового файлу, перша версія прочитає всі 900 байт і поверне 900, тоді як друга може не заважати нічого читати. В обох випадках показник положення файлу збільшується на кількість успішно прочитаних символів , тобто 900.
Але загалом, напевно, слід вибрати, як називати це, виходячи з того, яка інформація вам потрібна від нього. Прочитайте один елемент даних, якщо часткове зчитування не краще, ніж взагалі нічого не читати. Читайте меншими шматками, якщо часткові читання корисні.
fread(a, 1000, N, stdin);
завжди перевищувати показник fp на множину1000
?