Muy a menudo me meto en el código C donde las printf
cadenas de formato comienzan con \n
:
printf ("\ nHola");
En mi opinión, esto es algo molesto que no ofrece ventajas (¡sino muchas desventajas!) Con respecto a la impresión "Hello\n"
:
- Si la primera línea impresa comienza con
'\n'
, la salida del programa comenzará con una línea vacía (inútil) - Si la última línea impresa no termina con
'\n'
, la salida del programa no terminará con una nueva línea (útil cuando se lee la salida en un terminal) - En la mayoría de los terminales (en líneas de secuencias almacenadas en línea en general), la salida se vacía cuando
'\n'
se encuentra una, por lo que una línea que no termina con'\n'
podría mostrarse en la pantalla mucho tiempo después de que haya sido realmenteprintf
'd (o tal vez nunca, si la transmisión nunca se vacía) , por ejemplo, si el programa falla)
Entonces, ¿por qué a la gente le gusta esto?
fflush()
.Respuestas:
En general, se hace para garantizar que la declaración se imprima en la siguiente línea. Si se hace al final de la línea, se puede derivar el mismo efecto. Realmente es de poca consecuencia.
Actualización : siempre que elijas un camino y te quedes con él, realmente no va a importar un poco. Si está realmente preocupado, escriba todas sus declaraciones como "\ nHola \ n". Si tiene algunas líneas combinadas, entonces este no es un "error" difícil de solucionar. Simplemente regrese y cambie la declaración ofensiva.
fuente
"Hello2\n"
) podría terminar en la misma línea de su último mensaje ( terminando en"\nHelloHello2\n"
): ¿no es tan malo como tener sumessage on the same line of the previous one (eg: "\nPrevious-messageHello\n"
)? Si estos dos escenarios son malos de la misma manera, un programador / proyecto debe adoptar un estándar (por ejemplo: siempre'\n'
al principio o al final), pero no puedo ver qué ventajas podría tener al poner'\n'
al principio de sus mensajes ...Dos palabras: preferencia personal. En el gran esquema de las cosas, no creo que esto realmente importe. Si le molesta, pregunte al autor de este código por qué lo escriben así. Puede obtener algunas respuestas interesantes.
Prefiero todos mis caracteres de nueva línea al final de cada línea de todos modos.
fuente
Como alguien que usa este idioma en algunos contextos, aunque generalmente lo pongo
\n
al final para garantizar el enjuague, puedo ofrecer una justificación: tiendo a usar esto cuando formateo muchas líneas, especialmente si comienza con una línea vacía, de modo que el\n
s están alineados Esto significa que es algo más fácil (a) verificar que todas las líneas sí incluyen a\n
o (b) para ignorarlas como lastre, y simplemente leer el texto en las líneas. En esta situación, a mí también me parece más ordenado, pero todos estos beneficios me parecen menores.Un enfoque alternativo para minimizar el lastre sintáctico es usar literales de cadena que incluyen nuevas líneas, pero 6.4.5 en el estándar C11 lo prohíbe, por lo que debe hablar amablemente con su compilador y pensar cuidadosamente sobre lo que hará.
fuente
Una razón no mencionada (a menos que me lo haya perdido) es que algunos programas CLI usarán '\ r' para actualizar repetidamente una línea. Por ejemplo, con estado.
La siguiente línea requerirá una nueva línea para llevar el cursor a, bueno, la siguiente (nueva) línea.
Otro ejemplo (muy malo) es cuando el programador es consciente de que varios programas pueden estar escribiendo en el mismo terminal. En este caso caótico, existe la posibilidad de que el orden '\ n' limpie el texto almacenado en búfer antes de escribir más y posiblemente codifique los resultados de las escrituras. Pero ese orden no está garantizado, y tarde o temprano el otro proceso irrumpirá y arruinará las cosas. ¡No hagas esto en nada que quieras mostrarle a tu madre!
Trataría de mantener el ejemplo anterior para propósitos de depuración, y no someter a los usuarios que no sean usted a los resultados. Esto se aplicaría con múltiples tareas no sincronizadas que también se escriben en el mismo archivo (con suerte de depuración).
Sin embargo, el caso de usar '\ r' para escribir sobre una línea de texto en la pantalla no es tan raro en el mundo de la CLI.
Las cosas pasan, después de todo.
fuente