Perché la gente mette '\ n' all'inizio delle stringhe?

7

Molto spesso arrivo al codice C dove printf formato stringhe iniziano con \n :

printf ("\ nHello");

Questo a mio parere è una cosa fastidiosa che non offre vantaggi (piuttosto molti svantaggi!) rispetto alla stampa di "Hello\n" :

  • Se la prima riga stampata inizia con '\n' , l'output del programma inizierà con una (inutile) riga vuota
  • Se l'ultima riga stampata non termina con '\n' , l'output del programma non terminerà con una nuova riga (utile quando si legge l'output su un terminale)
  • Sulla maggior parte dei terminali (in generale, gli stream bufferizzati in linea), l'output viene svuotato quando viene rilevato un '\n' , quindi una riga che non termina con '\n' potrebbe essere visualizzata sullo schermo molto tempo dopo che è stata effettivamente printf ' d (o forse mai, se lo stream non viene mai scaricato, ad esempio se il programma si blocca)

Quindi, perché alla gente piace?

    
posta peoro 28.06.2011 - 17:23
fonte

4 risposte

16

Generalmente, è fatto per assicurare che la dichiarazione sia stampata sulla riga successiva. Se è fatto alla fine della linea, lo stesso effetto può essere derivato. È davvero di poca importanza.

Aggiornamento : finché scegli un modo e continui a seguirlo, non avrà alcuna importanza. Se sei davvero preoccupato, digita tutte le tue dichiarazioni come "\ nHello \ n". Se si hanno alcune linee che si mescolano, allora questo non è davvero difficile da correggere. Torna indietro e cambia la dichiarazione incriminata.

    
risposta data 28.06.2011 - 17:27
fonte
5

Due parole: preferenza personale. Nel grande schema delle cose, non penso che questo sia davvero importante. Se sei infastidito da questo, chiedi all'autore di questo codice perché lo scrive così. Potresti ricevere alcune risposte interessanti.

Preferisco comunque tutti i caratteri di nuova riga alla fine di ogni riga.

    
risposta data 28.06.2011 - 17:26
fonte
3

Come qualcuno che usa questo idioma in alcuni contesti - anche se in genere metto \n alla fine per garantire lo svuotamento -, posso offrire una giustificazione: tendo ad usarlo quando formatto molte righe, specialmente se si inizia con un vuoto linea, in modo che il \n s sia allineato. Ciò significa che è un po 'più facile a (a) controllare che tutte le linee includano effettivamente un \n o (b) per ignorarle come zavorra, e basta leggere il testo nelle linee. In questa situazione sembra davvero più ordinato anche per me, ma trovo tutti questi benefici minori.

Un approccio alternativo per ridurre al minimo la reattanza sintattica consiste nell'utilizzare stringhe letterali incluse le nuove linee, ma 6.4.5 nel C11 standard le proibisce, quindi devi parlare bene con il compilatore e pensare attentamente a cosa farà.

    
risposta data 11.02.2016 - 04:26
fonte
3

Una ragione non menzionata (a meno che non mi sia sfuggito), è che alcuni programmi CLI useranno '\ r' per aggiornare ripetutamente una riga. Ad esempio, con stato.

La prossima linea richiederà una nuova riga per ottenere il cursore, beh, la prossima (nuova) linea.

Un altro (molto brutto) esempio è dove il programmatore è consapevole che più programmi potrebbero scrivere sullo stesso terminale. In questo caso caotico, c'è la possibilità che venga imposto un certo ordine dal leader '\ n' svuotamento del testo bufferizzato prima di scrivere di più e possibilmente di rimescolare le uscite delle scritture. Ma tale ordinamento non è garantito, e prima o poi l'altro processo si intrometterà e rovinerà le cose. Non fare questo su qualcosa che vorresti mostrare a tua mamma!

Vorrei provare a mantenere l'esempio sopra riportato a scopo di debug e non sottoporre i risultati ad altri utenti diversi da te. Ciò si applica a più attività non sincronizzate che scrivono nello stesso file (auspicabilmente di debug).

Il caso di usare '\ r' per scrivere su una riga di testo sullo schermo, tuttavia, non è così raro nel mondo della CLI.

Succede, dopotutto.

    
risposta data 22.03.2017 - 01:00
fonte

Leggi altre domande sui tag