Trong một số ít trường hợp, có thể hữu ích khi thay đổi dòng được cung cấp bởi __LINE__
thành một thứ khác. Tôi đã thấy GNU cấu hình làm điều đó cho một số xét nghiệm để báo cáo số dòng thích hợp sau khi nó chèn một số voodoo giữa các dòng không xuất hiện trong các tập tin nguồn gốc. Ví dụ:
#line 100
sẽ làm cho các dòng sau bắt đầu với __LINE__
100. Bạn có thể tùy chọn thêm một tập tin tên mới
#line 100 "file.c"
Nó chỉ hiếm khi hữu ích. Nhưng nếu nó là cần thiết, không có lựa chọn thay thế tôi biết. Trên thực tế, thay vì dòng, một macro có thể được sử dụng quá mà phải dẫn đến bất kỳ của hai hình thức trên. Sử dụng thư viện tăng tiền xử lý, bạn có thể tăng dòng hiện bởi 50:
#line BOOST_PP_ADD(__LINE__, 50)
tôi nghĩ rằng nó là hữu ích để đề cập đến nó, vì bạn hỏi về việc sử dụng __LINE__
và __FILE__
. Một không bao giờ đủ bất ngờ ra khỏi C++ :)
Edit: @ Jonathan Leffler cung cấp một số trường hợp sử dụng tốt hơn trong các ý kiến:
Rối tung với #line là rất hữu ích cho pre-vi xử lý mà muốn giữ các lỗi được báo cáo trong mã C của người dùng phù hợp với tệp nguồn của người dùng. Yacc, Lex, và (nhiều hơn ở nhà với tôi) ESQL/C preprocessor làm điều đó.
Nguồn
2009-02-27 23:59:48
__LINE__ nên làm điều đúng. Tôi đã sử dụng nó và nhóm thuần tập của nó, bao gồm __PRETTY_FUNCTION__. ... Nhưng ... ừm, tôi vừa mới nhìn vào mã nơi __LINE__ nằm. Có lẽ vì nó nằm trong khối catch để xử lý ngoại lệ try/catch. –
có liên quan: [tham chiếu gcc cho các macro được xác định trước] (http://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html) –