Cosa significa Visual Studio normalizzando le terminazioni di riga incoerenti?

Occasionalmente Visual Studio mi dice:

Le terminazioni di riga nei seguenti file non sono coerenti. Vuoi normalizzare le terminazioni di linea?

Poi mi dà una discesa con standard diversi o qualcosa del genere, come Windows, Mac, Unix e un paio di quelli Unicode.

Cosa significa questo e cosa succederà se faccio clic su Yes ?

Ciò che in genere significa è che hai linee che finiscono con qualcosa di diverso da una coppia di ritorno a capo / riga. Accade spesso quando si copia e incolla da una pagina Web nell’editor di codice.

Normalizzare le terminazioni di linea è solo assicurarsi che tutti i caratteri di fine riga siano coerenti. Impedisce che una riga termini in \r\n e un’altra termini con \r o \n ; il primo è la coppia finale di Windows, mentre gli altri sono in genere utilizzati per i file Mac o Linux.

Dal momento che stai sviluppando in Visual Studio, ovviamente dovrai scegliere “Windows” dal menu a discesa. 🙂

Alcune linee terminano con \n .

Alcune altre linee terminano con \r\n .

Visual Studio ti suggerisce di fare in modo che tutte le linee finiscano allo stesso modo.

Se si utilizza Visual Studio 2012:

Passare al menu FileOpzioni di salvataggio avanzate → selezionare Tipo di fine linea come Windows (CR LF) .

Per triggersre / distriggersre l’opzione, segui i passaggi seguenti dalla barra dei menu :

StrumentiOpzioniAmbienteDocumentiVerifica la fine di linee coerenti al caricamento

Il file che stai modificando è stato modificato con un altro editor che non utilizza le stesse terminazioni di riga, risultando in un file con finali di linee miste.

I caratteri ASCII in uso per le terminazioni di riga sono:

CR, ritorno a capo
LF, avanzamento riga

Windows = CRLF
Mac OS 9 o versioni precedenti = CR
Unix = LF

Ciò significa che, ad esempio, alcune righe di testo con capo (lo standard di Windows) e alcune terminano con un (lo standard Unix).

Se si fa clic su “sì”, la fine riga del file sorgente verrà convertita per avere lo stesso formato.

Questo non farà alcuna differenza per il compilatore (perché le end-of-line contano come meri spazi bianchi), ma potrebbe fare qualche differenza con altri strumenti (es. Il ‘diff’ sul tuo sistema di controllo della versione).

L’ articolo newline di Wikipedia potrebbe aiutarti. Ecco un estratto:

Le diverse convenzioni di nuova riga spesso causano la visualizzazione errata di file di testo trasferiti tra sistemi di tipi diversi. Ad esempio, i file provenienti da sistemi Unix o Apple Macintosh possono apparire come una singola linea lunga su alcuni programmi in esecuzione su Microsoft Windows. Viceversa, quando si visualizza un file proveniente da un computer Windows su un sistema Unix, il CR aggiuntivo può essere visualizzato come ^ M o alla fine di ogni riga o come una seconda interruzione di riga.

Non è solo Visual Studio … Sarebbero tutti gli strumenti che leggono i file, i compilatori, i linker, ecc. Che dovrebbero essere in grado di gestirli.

In generale (per lo sviluppo di software) accettiamo il problema di terminazione di linea multipiattaforma, ma lasciamo che sia il software di controllo della versione ad occuparcene.

Esiste un componente aggiuntivo per Visual Studio 2008 che converte il formato di fine riga quando viene salvato un file. Puoi scaricarlo qui: http://grebulon.com/software/stripem.php