Tôi (đang) sử dụng các macro __FILE__
và __LINE__
để in các thông báo chẩn đoán ra khỏi mã của tôi. Điều này làm việc khá tốt khi bạn sử dụng GCC với thực hiện, các tập tin là ngắn như bạn chỉ định nó trên dòng lệnh. Gần đây tôi đã chuyển sang sử dụng CodeLite sử dụng tên tệp đủ điều kiện (ít nhất là dưới cửa sổ) khi xây dựng. Đột nhiên, đầu ra chẩn đoán của tôi gần như không thể đọc được.Làm cách nào để chỉ lấy tên tệp trong bộ tiền xử lý?
Có cách nào để chỉ lấy thành phần tệp của tên tệp trong bộ tiền xử lý không? Tôi có thể sống với một giải pháp cụ thể GCC không di động. (Tôi sẽ quay trở lại đồng bằng __FILE__
các trường hợp khác.)
Chắc chắn tôi có thể chuyển nội dung của __FILE__
thông qua chức năng và chỉ trích xuất thành phần tệp, nhưng thao tác chuỗi không phải là điều tôi đã lưu ý đối với các thông báo chẩn đoán không thay đổi hành vi thời gian chạy ...
LƯU Ý: Tôi sử dụng tên tệp theo cách mà GNU sử dụng. Đường dẫn là tập hợp tên tệp và tên tệp là số nhận dạng tương đối hoặc tuyệt đối của tệp. Tên tệp có thể được tạo thành từ thành phần thư mục và thành phần tệp.
Chẩn đoán thay đổi hành vi thời gian chạy (nếu không sẽ không có chẩn đoán) và liệu bạn gọi một hàm bổ sung có tạo ra sự khác biệt nhỏ không, vì bản thân đầu ra đang gọi hàm thư viện để thực hiện đầu ra. – eudoxos
In thông báo chẩn đoán thường liên quan đến, ngoài hàng tá hoạt động chuỗi, một số hành động I/O tệp không phải là rất lành tính. Vì một lý do nào đó dường như không ai lo lắng về điều này. Tại sao phải lo lắng về việc thêm một cuộc gọi đến một chức năng không có tác dụng phụ khác mà chỉ ảnh hưởng đến các thông báo chẩn đoán? –
Cả hai đều đúng, việc thêm chẩn đoán không có hiệu lực miễn phí. Tôi đã thực hiện nó theo cách đó, tôi để nó đi qua một hàm. Tôi đã tự hỏi nó giống như nó tồn tại. Nó chắc chắn không phải là tiêu chuẩn, nhưng việc tìm kiếm tài liệu về điều này là không hoàn hảo. (Ngay cả hướng dẫn gcc không phác thảo mọi macro được xác định trước.) – rioki