¿Debo usar printf (“\ n”) o putchar (‘\ n’) para imprimir una nueva línea en C?

Cuando estoy escribiendo un progtwig en C, a menudo tengo que imprimir una nueva línea por sí misma. Sé que puede hacerlo al menos de dos maneras: printf("\n") y putchar('\n') , pero no estoy seguro de cuál es la mejor opción en términos de estilo y posiblemente de eficiencia. ¿Existen buenas prácticas para usar una sobre la otra? ¿Realmente importa?

No importará cuál eligió si está utilizando un comstackdor moderno [1] . Tomemos, por ejemplo, el siguiente código C.

 #include  #include  void foo(void) { putchar('\n'); } void bar(void) { printf("\n"); } 

Cuando se comstack con gcc -O1 (optimizaciones habilitadas), obtenemos el siguiente código de máquina (idéntico) tanto en foo como en bar :

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

Tanto foo como bar terminan llamando putchar('\n') . En otras palabras, los comstackdores de C modernos son lo suficientemente inteligentes como para optimizar las llamadas a printf muy eficiente. Simplemente use el que crea que es más claro y legible.


  1. No considero que MS’s cl sea ​​un comstackdor moderno.

¿Existen buenas prácticas para usar una sobre la otra?

Deja que el estilo dirija la decisión.

Dado que la eficiencia de ejecución es la misma o casi idéntica, use el estilo que mejor transmita la función del código más grande.

Si la función tenía muchos printf() , quédate con printf("\n") .

Del mismo modo para putchar('\n') y putchar('\n') puts("")

Realmente no importa Nunca encontré un caso en el que la impresión en la consola haya sido importante para alguien en términos de elección de funciones o eficiencia.

printf y putchar son funciones stdio, por lo que ambos escriben en el mismo manejador FILE (en lugar de hacerlo directamente en el descriptor de archivo).

Sin embargo, printf es mucho más pesado ya que el primer argumento es una cadena de formato que necesita ser escaneada en busca de expresiones de reemplazo y escapes.

Entonces, tanto printf("\n") como putchar('\n') harán lo mismo, pero este último será más rápido.

printf es mucho más lento porque la cadena de formato se analiza en tiempo de ejecución. Por supuesto, el progtwig de tareas promedio o la solución simple de Project Euler es tan pequeño que perder algunos ciclos de CPU no importa de todos modos.

Iría con putchar ya que la cadena en printf necesita ser analizada. Debería ser un poco más rápido, pero probablemente no mucho.