Muitas vezes, eu entro no código C onde as printf
seqüências de formato começam com \n
:
printf ("\ nOlá");
Na minha opinião, isso é irritante e não oferece vantagens (mas muitas desvantagens!) Em relação à impressão "Hello\n"
:
- Se a primeira linha impressa começar
'\n'
, a saída do programa começará com uma linha vazia (inútil) - Se a última linha impressa não terminar
'\n'
, a saída do programa não terminará com uma nova linha (útil ao ler a saída em um terminal) - Na maioria dos terminais (em fluxos de buffer em linha em geral), a saída é liberada quando a
'\n'
é encontrada; portanto, uma linha que não termina com'\n'
pode ser mostrada na tela muito tempo depois de ter sido efetivamenteprintf
d (ou talvez nunca, se o fluxo nunca for liberado) , por exemplo, se o programa travar)
Então, por que as pessoas gostam disso?
fflush()
.Respostas:
Geralmente, isso é feito para garantir que a declaração seja impressa na próxima linha. Se isso for feito no final da linha, o mesmo efeito pode ser derivado. É realmente de pouca importância.
Atualização : Contanto que você escolha uma maneira e a cumpra, isso realmente não vai importar nem um pouco. Se você estiver realmente preocupado, digite todas as suas declarações como "\ nOlá \ n". Se você tem algumas linhas combinadas, isso não é realmente tão difícil de corrigir. Basta voltar e alterar a declaração ofensiva.
fonte
"Hello2\n"
) pode acabar na mesma linha da sua última (terminando em"\nHelloHello2\n"
): isso não é tão ruim quanto ter o seumessage on the same line of the previous one (eg: "\nPrevious-messageHello\n"
? Se esses dois cenários são ruins da mesma maneira, um programador / projeto deve adotar um padrão (por exemplo: sempre colocando'\n'
no início ou no final), mas não consigo ver quais vantagens você poderia ter ao colocar'\n'
no início das suas mensagens ...Duas palavras: preferência pessoal. No grande esquema das coisas, não acho que isso realmente importe. Se você está chateado com isso, pergunte ao autor deste código por que ele o escreve assim. Você pode obter algumas respostas interessantes.
Prefiro todos os meus caracteres de nova linha no final de cada linha.
fonte
Como alguém que usa essa expressão em alguns contextos - embora eu geralmente colocar
\n
no final para garantir rubor -, eu posso oferecer uma justificação: Eu tendem a usar este ao formatar muitas linhas, especialmente se começando com uma linha em branco, para que as\n
s estão alinhados. Isso significa que é um pouco mais fácil (a) verificar se todas as linhas realmente incluem a\n
ou (b) ignorá-las como lastro e apenas ler o texto nas linhas. Nessa situação, na verdade, parece mais arrumado para mim também, mas acho todos esses benefícios menores.Uma abordagem alternativa para minimizar o lastro sintático é usar literais de string, incluindo novas linhas, mas o 6.4.5 no padrão C11 os proíbe, portanto, você deve falar bem com o seu compilador e pensar cuidadosamente sobre o que ele fará.
fonte
Um motivo não mencionado (a menos que eu tenha perdido) é que alguns programas CLI usarão '\ r' para atualizar repetidamente uma linha. Por exemplo, com status.
A próxima linha exigirá uma nova linha para que o cursor chegue à próxima (nova) linha.
Outro exemplo (muito ruim) é o local em que o programador está ciente de que vários programas podem estar gravando no mesmo terminal. Nesse caso caótico, há uma chance de que alguma ordem seja imposta pelo '\ n' principal liberando texto em buffer antes de escrever mais e possivelmente misturando as saídas das gravações. Mas essa ordem não é garantida e, mais cedo ou mais tarde, o outro processo entrará e estragará as coisas. Não faça isso em nada que você gostaria de mostrar para sua mãe!
Eu tentaria manter o exemplo acima para fins de depuração e não sujeitaria outros usuários além de você aos resultados. Isso se aplica a várias tarefas não sincronizadas, gravadas no mesmo arquivo (espero que depure) também.
O caso de usar '\ r' para escrever sobre uma linha de texto na tela, no entanto, não é tão raro no mundo da CLI.
Afinal, as coisas acontecem.
fonte