Moet ik printf(“\n”) of putchar(‘\n’) gebruiken om een nieuwe regel in C af te drukken?

Als ik een programma in C schrijf, moet ik vaak zelf een nieuwe regel afdrukken. Ik weet dat je dit op ten minste twee manieren kunt doen: printf("\n")en putchar('\n'), maar ik weet niet zeker op welke manier is qua stijl en eventueel efficiëntie de beste keuze. Zijn er best practices om de een boven de ander te gebruiken? Maakt het echt uit?


Antwoord 1, autoriteit 100%

Het maakt niet uit welke je kiest als je een moderne compiler gebruikt[1]. Neem bijvoorbeeld de volgende C-code.

#include <stdlib.h>
#include <stdio.h>
void foo(void) {
    putchar('\n');
}
void bar(void) {
    printf("\n");
}

Wanneer gecompileerd met gcc -O1(optimalisaties ingeschakeld), krijgen we de volgende (identieke) machinecode in zowel fooals bar:

movl    $10, %edi
popq    %rbp
jmp _putchar                ## TAILCALL

Zowel fooals barroepen uiteindelijk putchar('\n')aan. Met andere woorden, moderne C-compilers zijn slim genoeg om printf-aanroepen zeer efficiënt te optimaliseren. Gebruik gewoon wat je denkt dat duidelijker en leesbaarder is.


  1. Ik beschouw de clvan MS niet als een moderne compiler.

Antwoord 2, autoriteit 38%

Zijn er praktische tips om de een boven de ander te gebruiken?

Laat stijl de beslissing bepalen.

Aangezien de efficiëntie van de uitvoering hetzelfde of bijna identiek is, moet u de stijl gebruiken die de functie van de grotere code het beste weergeeft.

Als de functie veel printf()had, blijf dan bij printf("\n").

Evenzo voor putchar('\n')en puts("")


Antwoord 3, autoriteit 23%

printfen putcharzijn beide stdio-functies, dus ze schrijven allebei naar dezelfde FILE-handle (in plaats van rechtstreeks naar de bestandsdescriptor) .

printfis echter veel zwaarder omdat het eerste argument een opmaaktekenreeks is die moet worden gescand op vervangende expressies en escapes.

Dus zowel printf("\n")als putchar('\n')zullen hetzelfde doen, maar de laatste zal sneller zijn.

p>


Antwoord 4, autoriteit 19%

Het maakt niet echt uit. Ik ben nog nooit een case tegengekomen waarin afdrukken naar de console ooit belangrijk was voor iemand in termen van functiekeuze of efficiëntie.


Antwoord 5, autoriteit 12%

printf is veel langzamer omdat de format string tijdens runtime wordt geparseerd. Natuurlijk is het gemiddelde huiswerkprogramma of de eenvoudige Project Euler-oplossing zo klein dat een paar CPU-cycli er toch niet toe doen.


Antwoord 6, autoriteit 12%

Ik zou voor putchargaan omdat de string in printfmoet worden geparseerd. Zou iets sneller moeten zijn – maar waarschijnlijk niet veel.

Other episodes