Tôi muốn có thể làm điều gì đó như
#print "C Preprocessor got here!"
cho mục đích gỡ lỗi. Cách tốt nhất / di động nhất để làm điều này là gì?
Tôi muốn có thể làm điều gì đó như
#print "C Preprocessor got here!"
cho mục đích gỡ lỗi. Cách tốt nhất / di động nhất để làm điều này là gì?
Câu trả lời:
Các warning
chỉ thị có lẽ là gần nhất bạn sẽ nhận được, nhưng nó không hoàn toàn nền tảng độc lập:
#warning "C Preprocessor got here!"
AFAIK này hoạt động trên hầu hết các trình biên dịch ngoại trừ MSVC, trên đó bạn sẽ phải sử dụng một pragma
chỉ thị:
#pragma message ( "C Preprocessor got here!" )
#define WARNING(msg) _Pragma("message " #msg)
Phần sau được hỗ trợ bởi MSVC và GCC .
#pragma message("stuff")
#pragma message "stuff"
Clang đã bắt đầu thêm hỗ trợ gần đây, hãy xem tại đây để biết thêm.
Một giải pháp khác là sử dụng các chú thích cùng với một tập lệnh shell để xử lý chúng. Điều này đòi hỏi một số kỷ luật (hoặc một tập lệnh shell mắc lỗi chính tả).
Ví dụ: tôi thêm các nhận xét được định dạng //TODO
và sau đó là một tập lệnh shell thu thập tất cả chúng vào một báo cáo.
Đối với các trường hợp sử dụng phức tạp hơn, bạn có thể thử viết bộ tiền xử lý đơn giản của riêng mình. Ví dụ: bạn có thể chỉnh sửa các nguồn của mình dưới dạng *.c2
tệp. Bộ tiền xử lý đơn giản sẽ đọc nguồn, tìm kiếm //TODO
và ghi printf("TODO ...")
vào *.c
tệp đầu ra .
Bạn không thể. Các bộ tiền xử lý được xử lý trước mã C. Không có chỉ thị tiền xử lý nào để in ra màn hình, vì mã tiền xử lý không được thực thi, nó được sử dụng để tạo mã C sẽ được biên dịch thành mã thực thi.
Có gì sai với:
#ifdef ...
printf("Hello");
#endif
Bởi vì đây là tất cả những gì bạn có thể làm trong phạm vi các bộ tiền xử lý.
#ifdef _LINUX #define #preprocmsg "#warning" else #define #preprocmsg "#pragma message"
... Tôi sẽ phải thử điều đó nhưng bản năng cho tôi biết câu trả lời là không.