2013-05-15 26 views
8

Thật dễ dàng để có được một danh sách các hàm và biến không sử dụng với phản hồi của trình liên kết, nhưng làm thế nào tôi có thể phát hiện những định nghĩa macro chưa sử dụng đó & typedef? Tôi có phải duyệt dòng mã bằng dòng và git grep trong toàn bộ dự án không?Làm thế nào để phát hiện các định nghĩa macro & typedef không sử dụng?

+7

Trình biên dịch * không thể vì nó chạy sau bộ tiền xử lý. – chris

+3

Tôi cho rằng một giải pháp khác với mã duyệt và grepping sẽ chạy 'gcc -E' với macro đã cho và không có macro cụ thể, sau đó so sánh kết quả. Nếu chúng giống nhau, macro không được sử dụng trong mã. Có lẽ một cách tốt hơn để làm điều đó, mặc dù. –

+0

@EricFinn, Điều đó nghe có vẻ không tệ với tôi lúc đầu. Tôi biết rằng không phải là khả thi cho các cơ sở mã lớn, mặc dù. – chris

Trả lời

7

Công cụ phân tích tĩnh cho các chương trình C và C++ có thể bao gồm kiểm tra các macro tiền xử lý không sử dụng.

Ví dụ: xem PC-Lint.

Một khả năng khác là đi vào các tệp cụ thể bao gồm và sử dụng #ifdef 0 để loại bỏ các phần lớn macro và sau đó xem lại lỗi trình biên dịch bằng cách sử dụng thuật toán phân chia và chinh phục.

Tuy nhiên tôi hy vọng rằng một công cụ phân tích tĩnh sẽ là cách tiếp cận tốt hơn nhiều khi kích thước mã nguồn trở nên lớn.

+0

PC-Lint là một công cụ tuyệt vời cần có trong * mọi máy tính của nhà phát triển chuyên nghiệp. –

+3

Ngoại trừ hàng triệu nhà phát triển không bao giờ chạm vào Windoze. –

+1

Flexlint là một giải pháp thay thế cho PC-Lint. –

2

Đối với các macro chưa sử dụng, bạn có thể muốn xem coan. Nó có các tùy chọn có thể hỗ trợ với nhiệm vụ này. Từ số about page:

Ký hiệu nào sẽ xuất hiện trong chỉ thị tiền xử lý hoạt động trong một cấu hình nhất định?

(Chỉ thị tiền xử lý đang hoạt động nếu nó không nằm trong phạm vi của bất kỳ #if sai nào). Giả sử một lần nữa rằng bạn quan tâm đến nguồn C trong ứng dụng, bạn có thể hiển thị danh sách các ký hiệu này, với tên tệp và số dòng, với lệnh:

$> ký hiệu coan --recurse --locate - active --once --filter c, h app

Nó có các tùy chọn để loại bỏ các đoạn mã có điều kiện (#if 0 và bạn bè), và nhiều tính năng hữu ích khác để xử lý tiền xử lý C. Tôi sẽ sử dụng nó để thu thập tất cả các biểu tượng #define d và tất cả các biểu tượng và bạn bè #ifdef hoặc defined. Tôi sắp xếp và uniq hai bộ sưu tập các biểu tượng và phân biệt chúng. Đây là một cách khá tốt để định vị lỗi chính tả. Sau đó, tôi sẽ lấy một biểu đồ của họ một cách riêng biệt và bắt đầu với ít nhất là thường xuyên và làm việc theo cách của tôi lên danh sách.

Đối với typedef không sử dụng, đó là một thách thức khác. Bạn có thể sử dụng chương trình loại tham chiếu chéo như OpenGrok hoặc GNU Global, nhưng điều đó không thực sự tự động.

7

Đối với các macro được xác định trong tệp nguồn, bạn có thể thử cờ -Wunused-macros gcc/clang. Ngoài ra còn có -Wunused-local-typedefs trong gcc.

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