Hãy nghĩ về một số vấn đề có thể xảy ra nếu không có dòng mới. Theo tiêu chuẩn ANSI, #include
tập tin lúc đầu sẽ chèn tập tin chính xác vào phía trước tập tin và không chèn dòng mới vào #include <foo.h>
sau nội dung của tập tin. Vì vậy, nếu bạn bao gồm một tệp không có dòng mới ở cuối trình phân tích cú pháp, nó sẽ được xem như là dòng cuối cùng foo.h
nằm trên cùng dòng với dòng đầu tiên foo.cpp
. Điều gì sẽ xảy ra nếu dòng cuối cùng của foo.h là một bình luận không có dòng mới? Bây giờ dòng đầu tiên foo.cpp
được nhận xét. Đây chỉ là một vài ví dụ về các loại vấn đề có thể leo lên.
Chỉ muốn chỉ ra bất kỳ bên quan tâm đến câu trả lời của James dưới đây. Mặc dù câu trả lời trên vẫn đúng với C, nhưng tiêu chuẩn C ++ mới (C ++ 11) đã được thay đổi để cảnh báo này không còn được đưa ra nếu sử dụng C ++ và trình biên dịch tuân thủ C ++ 11.
Từ tiêu chuẩn C ++ 11 qua bài đăng của James:
Một tệp nguồn không trống và không kết thúc bằng một ký tự dòng mới hoặc kết thúc bằng một ký tự dòng mới ngay trước ký tự dấu gạch chéo ngược trước khi xảy ra bất kỳ kết nối như vậy, sẽ được xử lý như thể một phần mới bổ sung ký tự dòng được thêm vào tệp (C ++ 11 §2.2 / 1).
cat
là một tệp và nó không có dòng mới vì dấu nhắc shell mới sẽ xuất hiện sau dòng cuối cùng của tệp (không phải trong cột 0)