2010-07-05 28 views
12

Trong Visual C++, người ta có thể tìm thấy các tập tin tiêu đề mà bất kỳ tên (biến hoặc loại) là định nghĩa bằng cách nhấn F12 vào nó hoặc chọn Đến Definition. Tính năng này rất hữu ích, nhưng nó chỉ hiển thị vị trí cuối cùng (tệp tiêu đề) trong đó tên được xác định. Có cách nào để tìm ra chuỗi của tệp tiêu đề dẫn từ tệp nguồn của tôi đến tệp tiêu đề cuối cùng cho một tên đã cho không?C/C++: Làm thế nào để tìm ra chuỗi các tệp tiêu đề cho một định nghĩa đã cho?

Ví dụ, hãy xem xét mã này:

// main.cpp  
#include <stddef.h> 
int main() 
{ 
    size_t s; 
    return 0; 
} 

Trong Visual C++ 2010, nếu tôi tìm kiếm các định nghĩa của size_t ở trên main.cpp, nó vùng đất tôi trong một số tập tin có tên sourceannotations.h. Tôi biết rằng chuỗi tiêu đề này bắt đầu bằng stddef.h (mà tôi đã bao gồm) và kết thúc bằng sourceannotations.h. Làm thế nào để tìm ra các liên kết ở giữa chuỗi này?

+1

Nếu bạn đang tìm kiếm một phím nóng trong Visual Studio (tm) hoặc cho một Visual Studio (tm) Certified (r) plugin để làm điều này, bạn có lẽ nên gắn thẻ câu hỏi của bạn với một trong Visual Studio (tm) liên quan tags ... –

+0

Pavel: Tôi không tìm kiếm một phím nóng như vậy. Tuy nhiên, sẽ gắn thẻ nó với VS anyway vì giải pháp này cũng sẽ hữu ích :-) –

Trả lời

12
  1. dự án Nhấp chuột phải, "Project Properties"
  2. "Configuration Properties" -> "C/C++" -> "Advanced".
  3. Đặt "Hiển thị bao gồm" thành "Có".

Phân cấp đầy đủ các tiêu đề sẽ được in ra trong cửa sổ đầu ra khi bạn biên dịch mọi tệp.

+0

Công trình này hoạt động! Nó không hiển thị chuỗi cho một cái tên nhất định, nhưng gần như phù hợp với nhu cầu của tôi. Cảm ơn! :-) –

+0

Đối với những người tò mò, chuỗi tiêu đề cho size_t trong VC++ 2010 hóa ra là: stddef.h -> crtdefs.h -> sal.h -> sourceannotations.h –

+1

@Ashwin: bạn sẽ không nhận được chính xác chuỗi phụ thuộc, bởi vì tiêu đề có thể được bao gồm từ nhiều nơi. Điều gì tệ hơn, C++ cho phép typedefs trùng lặp cùng loại. Bây giờ bạn có một cây, thay vì một chuỗi. –

1

Bạn có thể sử dụng các công cụ kỹ thuật đảo ngược như Doxygen, Hiểu phân tích, v.v. Điều này sẽ giúp bạn hiểu được luồng đầy đủ các biến, các cuộc gọi hàm.

+0

+1 để tham khảo Hiểu về C/C++, nhưng điều này vẫn yêu cầu bạn mở biểu đồ bao gồm trong Hiểu và nhấp mở mỗi lần cho đến bạn tìm thấy tệp bao gồm biến/loại/hằng số được xác định thực sự. Vì vậy, vẫn còn rất nhiều công việc thủ công. Nhưng, mặt khác, thực sự là một tiện ích rất tốt. – Patrick

1

Trong hộp thoại thuộc tính của bạn, trong C/C++, Preprocessor, cho phép Preprocess to a File. Nếu bạn biên dịch main.cpp, điều này sẽ tạo ra main.i.

Sau đó, bạn có thể tìm trong main.i và xem tệp nào bao gồm tệp khác.

+0

Đó cũng là ý tưởng ban đầu của tôi (bằng cách sử dụng tùy chọn trình biên dịch/P), nhưng từ tệp .i được tạo ra đó, tôi nghĩ rằng vẫn khó thấy được chuỗi 'thực tế' là gì. – Patrick

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