Лучше ли puts или putchar печатать только новую строку?

Что лучше (как по производительности, так и по рекомендациям) для печати только новой строки:

putchar('\n') or puts("")

Насколько я понимаю, putchar выводит один символ, а puts выводит строку символов. Забудьте о printf.

Я склонен использовать puts, потому что он короче, но ("") просто кажется неправильным.

Что быстрее и лучше?


person Insane    schedule 14.01.2016    source источник
comment
так что... fputc не должно быть в этом списке опций?, или только putc? Можно также включить их все (putchar эквивалентно putc(ch,stdout))   -  person WhozCraig    schedule 14.01.2016
comment
Лично я бы предпочел putchar('\n'), но у меня нет для этого разумного обоснования. Просто мне не нравится puts из-за непоследовательного поведения добавления новой строки в конец, а fputs - нет.   -  person 5gon12eder    schedule 14.01.2016
comment
Вас беспокоит производительность буферизованной консоли, которую будут читать люди? Если бы я сказал вам, что один из них был на 8 микросекунд быстрее, чем другой, было бы это причиной, чтобы выбрать тот, который переводит новую строку для ваших ожидающих глаз намного быстрее?   -  person Eric Lippert    schedule 14.01.2016
comment
Профиль. Но я сильно подозреваю, что макрос, единственной целью которого является запись одного символа, будет работать лучше (хотя и тривиально), чем функция более общего назначения. Конечно, если раньше вы просто использовали puts, в игру вступает кэширование; горячий код, вероятно, быстрее холодного кода, даже если горячий код должен выполнить еще пару инструкций.   -  person ShadowRanger    schedule 14.01.2016
comment
@EricLippert Не беспокоюсь об этом, любопытно.   -  person Insane    schedule 14.01.2016


Ответы (4)


Любая разница в скорости между ними будет незначительной, но putchar, вероятно, быстрее, потому что принимает один аргумент char.

Гораздо важнее то, что putchar('\n') говорит то, что вы имеете в виду, а puts("") — нет.

person hobbs    schedule 14.01.2016

Теоретически одному нужен указатель и лишний байт, а другому нет. Кроме того, может потребоваться больше инструкций и потенциально может произойти i-cache, что может быть плохо. На практике разница между ними почти наверняка незначительна.

Тем не менее, лично я бы по-прежнему использовал putc или putchar просто потому, что код легче читать и понимать всем остальным.

person Jason    schedule 14.01.2016

Хороший компилятор выдаст такой же оптимизированный код для приведенного ниже кода, так что это не проблема производительности.

putchar('\n');
puts("");

Используйте тот, который лучше передает цель кода. Это часто зависит от того, что еще печатается.

// Example 1
putchar('(');
putchar(ch);
putchar(')');

putchar('\n');  // Better choice
// puts("");


// Example 2
puts(name);
puts(rank);
puts(serial_number);

// putchar('\n');  
puts(""); // Better choice
person chux - Reinstate Monica    schedule 14.01.2016

Несмотря на то, что puts() позволяет вам выводить строку, вы выводите строку, содержащую только один символ (новую строку), поэтому результат и производительность должны быть такими же, как при использовании putchar().

person user4982357    schedule 14.01.2016