2015-07-22 15 views
10

Ich beziehe mich auf: Why should text files end with a newline? Eine der Antworten zitiert den C89-Standard. Kurz gesagt, eine Datei muss mit einer neuen Zeile enden, der nicht unmittelbar ein Backslash vorangestellt ist.C++ - Standards (Zeilenende der Quelldateien)

Gilt das für den neuesten C++ - Standard?

#include <iostream> 
using namespace std; 

int main() 
{ 
    cout << "Hello World!" << endl; 
    return 0; 
} 
//\ 

Ist das obengenannte gültig? (Es Angenommen ist ein Newline nach // \, die ich habe nicht in der Lage gewesen anzuzeigen)

+3

"Aus Konsistenzgründen ist es sehr hilfreich, dieser Regel zu folgen". [Historisch] (http://stackoverflow.com/questions/72271/no-newline-at-end-of-file-compiler-warning), das Hauptproblem bestand darin, einen Zeilenumbruch nach einer .h-Datei mit einem # hinzufügen Endif Header Guard. – paulsm4

+1

Warum nicht selbst testen? – Jashaszun

+0

Hmm, davon habe ich noch nie gehört. –

Antwort

7

Der angegebene Code ist legal im Fall von C++, aber nicht für C.

Tatsächlich ist die C (N1570 Standard) sagt:

Jede Instanz eines umgekehrten Schrägstrichs (\), unmittelbar gefolgt von einer Zeile Zeichen gelöscht wird, Splicing physikalische Quellenleitungen logische Quellenleitungen zu bilden. Nur der letzte Backslash auf einer physischen Quellleitung darf als Teil eines solchen Spleißes verwendet werden. Eine Quelldatei, die nicht leer ist, muss in einem neuen Zeilenzeichen enden, , dem nicht unbedingt ein Backslash-Zeichen vorangestellt werden muss, bevor ein solches -Spleißen stattfindet.

Die C++ Standard (N3797) es ein bisschen anders formuliert (Hervorhebung von mir):

Jede Instanz einer umgekehrten Schrägstrich (\) sofort durch eine neue Zeilen Zeichen folgt gelöscht wird, Splicing physische Quellzeilen, um logische Quellzeilen zu bilden. Nur der letzte Backslash auf einer physischen Source Line darf als Teil eines solchen Spleißes betrachtet werden. Wenn dadurch eine Zeichenfolge erzeugt wird, die mit der Syntax eines universellen Zeichennamens übereinstimmt, ist das Verhalten nicht definiert. Eine Quelldatei , die nicht leer ist und die nicht in einem Zeilenvorschubzeichen endet oder die in einem Zeilenvorschubzeichen endet, dem ein umgekehrter Schrägstrich vorausgeht, bevor ein solches Spleißen stattfindet, soll wie verarbeitet werden Ein zusätzliches Zeilenvorschubzeichen wurde an die Datei angehängt.