2015-07-22 17 views
10

Tôi đề cập đến: Why should text files end with a newline? Một trong các câu trả lời trích dẫn tiêu chuẩn C89. Nói tóm lại, một tập tin phải kết thúc bằng một dòng mới, mà không phải ngay trước dấu gạch chéo ngược.Tiêu chuẩn C++ (dòng cuối của tệp nguồn)

Điều đó có áp dụng cho tiêu chuẩn C++ gần đây nhất không?

#include <iostream> 
using namespace std; 

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

Ở trên có hợp lệ không? (Giả sử có một dòng mới sau // \, mà tôi đã không thể hiển thị)

+3

"Để nhất quán, rất hữu ích khi thực hiện theo quy tắc này". [Lịch sử] (http://stackoverflow.com/questions/72271/no-newline-at-end-of-file-compiler-warning), vấn đề chính là không thêm dòng mới sau tệp .h với số # endif header guard. – paulsm4

+1

Tại sao bạn không tự mình thử nghiệm? – Jashaszun

+0

Hmm, tôi chưa bao giờ nghe bất cứ điều gì về điều đó. –

Trả lời

7

Mã cho là hợp pháp trong trường hợp của C++, nhưng không phải cho C.

Thật vậy, C (N1570) tiêu chuẩn nói:

Mỗi thể hiện của một nhân vật dấu chéo ngược (\) ngay lập tức theo sau là một dòng mới nhân vật bị xóa, nối dòng nguồn vật chất để tạo thành dòng nguồn logic. Chỉ có dấu gạch chéo ngược cuối cùng trên bất kỳ dòng nguồn vật lý nào đủ điều kiện để là một phần của mối nối đó. Tệp nguồn không trống sẽ kết thúc bằng một ký tự dòng mới, không được đặt trước ngay trước ký tự dấu gạch chéo ngược trước khi bất kỳ sự ghép nối nào xảy ra như vậy.

C++ chuẩn (N3797) formulates nó một chút khác nhau (tôi nhấn mạnh):

Mỗi thể hiện của một nhân vật dấu chéo ngược (\) ngay lập tức theo sau là một nhân vật mới dòng bị xóa, nối các dòng nguồn vật lý để tạo thành các dòng nguồn logic. Chỉ có dấu gạch chéo ngược cuối cùng trên bất kỳ dòng nguồn vật lý nào sẽ đủ điều kiện để trở thành một phần của mối nối đó. Nếu, kết quả là, một chuỗi ký tự mà khớp với cú pháp của tên ký tự đại diện được tạo ra, hành vi không xác định. Tệp nguồn không được để trống và không kết thúc bằng ký tự dòng mới hoặc kết thúc bằng ký tự dòng mới ngay trước ký tự gạch chéo trước khi bất kỳ phép nối nào diễn ra, sẽ được xử lý như thể thêm một ký tự dòng mới được thêm vào tệp.

Các vấn đề liên quan