2013-07-01 22 views
5

Nó, sau khi tất cả, được định nghĩa trong stddef.h VÀ C++ config.h:Eclipse CDT mã phân tích cho rằng size_t là mơ hồ

C++ config.h:

namespace std 
{ 
    typedef __SIZE_TYPE__  size_t; 
    typedef __PTRDIFF_TYPE__ ptrdiff_t; 

#ifdef __GXX_EXPERIMENTAL_CXX0X__ 
    typedef decltype(nullptr) nullptr_t; 
#endif 
} 

stddef .h:

typedef __SIZE_TYPE__ size_t; 

Vì vậy, khi một tập tin không using namespace std, mã phân tích Eclipse CDT bị nhầm lẫn và cho biết biểu tượng là mơ hồ. Tôi không biết làm thế nào gcc hoạt động xung quanh này, nhưng không ai có bất cứ đề nghị về những gì để làm cho việc phân tích mã eclipse?

+0

Trong mã bạn hiển thị size_t chỉ được định nghĩa trong C++ config.h. __SIZE_TYPE__ được định nghĩa trong stddef.h và được sử dụng trong C++ config.h - vấn đề thực tế là gì – Mark

+0

@Mark Oops, được sao chép sai dòng. Đã sửa lỗi. Cảm ơn! – Chris

+0

Bạn đang sử dụng tệp nào trong tệp? – Mark

Trả lời

4

Tôi đã giải quyết vấn đề này bằng cách tắt hoàn toàn lỗi đó trong phân tích mã.

Project -> Properties -> C/C++ General -> Phân tích Mã

Bỏ chọn 'vấn đề nhập nhằng'

1

Nó là chủ yếu, nhưng không hoàn toàn, đúng là mã C hợp lệ cũng là C++ mã hợp lệ. Bạn đã nhấn một trường hợp không đúng. Câu hỏi này có một câu trả lời rất tốt về sự khác biệt trong trường hợp này: Repeated typedefs - invalid in C but valid in C++? Nó cũng đáng chú ý là C11 sẽ khắc phục sự không tương thích này.

Thực tế, hành vi này là ở đâu đó giữa sự thiếu hụt và khiếm khuyết trong phân tích mã CDT. CDT nên biết rằng mã là C++ và cho phép cú pháp, nhưng có vẻ như nó cho rằng đó là C và không cho phép nó.

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