2015-07-22 12 views
10

Mam na myśli: Why should text files end with a newline? Jedna z odpowiedzi dotyczy normy C89. Co w skrócie oznacza, że ​​plik musi kończyć się nową linią, która nie jest bezpośrednio poprzedzona odwróconym ukośnikiem.Standardy C++ (koniec nowej linii plików źródłowych)

Czy to dotyczy najnowszego standardu C++?

#include <iostream> 
using namespace std; 

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

Czy powyższe informacje są prawidłowe? (Zakładając, że jest to znak nowej linii po // \, który byłem w stanie wyświetlać)

+3

"Dla spójności bardzo pomocne jest przestrzeganie tej zasady". [Historycznie] (http://stackoverflow.com/questions/72271/no-newline-at-end-of-file-compiler-warning), głównym problemem było nie dodanie nowego wiersza po pliku .h z # Endif Head Guard. – paulsm4

+1

Dlaczego nie przetestować go samodzielnie? – Jashaszun

+0

Hmm, nigdy o tym nie słyszałem. –

Odpowiedz

7

Podany kod jest legalne w przypadku C++, ale nie dla C

Rzeczywiście, C (N1570) norma mówi:

Każde wystąpienie znaku backslash (\) natychmiast po nowym wierszu znak zostanie usunięty, forniru linie źródłowe fizyczne tworząc logiczne linii źródłowych. Tylko ostatni odwrotny ukośnik na dowolnej fizycznej linii źródłowej może być częścią takiego splotu. Plik źródłowy, który nie jest pusty, kończy się na znaku nowej linii, , który nie powinien być bezpośrednio poprzedzany znakiem odwrotnego ukośnika, zanim nastąpi takie splicingowanie .

C++ średnia (N3797) formułuje się nieco inaczej (kopalnia nacisk)

Każdy przykład od charakteru ukośnikiem (\), po czym natychmiast charakterze nowej linii usunięciu forniru fizyczne linie źródłowe tworzące logiczne linie źródłowe. Jedynie ostatni odwrotny ukośnik na dowolnej linii fizycznej musi kwalifikować się do bycia częścią takiego splotu. Jeśli w rezultacie zostanie utworzona sekwencja znaków zgodna ze składnią uniwersalnego znaku-nazwy, zachowanie jest niezdefiniowane. Plik źródłowy , który nie jest pusty i który nie kończy się na znaku nowej linii lub kończy się na znaku nowej linii bezpośrednio poprzedzony znakiem odwrotnego ukośnika przed wykonaniem takiego splicingu, zostanie przetworzony , tak jakby był do pliku dołączono dodatkowy znak nowej linii.

Powiązane problemy