2013-07-01 10 views
5

To jest, mimo wszystko, się definicją zawartą w stddef.h i C++ config.h:Eclipse CDT analizy kodu myśli size_t jest niejednoznaczna

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; 

Więc gdy plik ma using namespace std analiza kodu Eclipse CDT pogubi i mówi, że symbol jest niejednoznaczna. Nie wiem, jak działa GCC, ale czy ktoś ma sugestie co zrobić w analizie kodu zaćmienia?

+0

W kodzie, który pokazuje size_t jest zdefiniowany tylko w C++ config.h. __SIZE_TYPE__ jest zdefiniowany w stddef.h i używany w C++ config.h - jaki jest aktualny numer – Mark

+0

@Mark Oops, skopiowany w niewłaściwym wierszu. Naprawiono teraz. Dzięki! – Chris

+0

Gdzie w pliku używasz? – Mark

Odpowiedz

4

Objąłem to przez całkowite wyłączenie tego błędu w analizie kodu.

Project -> Właściwości -> C/C++ Ogólne -> Code Analysis

Odznacz Niejednoznaczne problem "

1

To głównie, ale nie do końca prawdą, że prawidłowy kod C jest również ważny kod C++. Uderzyłeś w sprawę, w której to nie jest prawdą. To pytanie ma bardzo dobrą odpowiedź na temat różnicy w tym przypadku: Repeated typedefs - invalid in C but valid in C++? Warto również zauważyć, że C11 naprawi tę niezgodność.

Skutkiem tego jest, że takie zachowanie jest gdzieś pomiędzy niedoborem a defektem w analizie kodu CDT. CDT powinien wiedzieć, że kod to C++ i zezwalać na składnię, ale wygląda na to, że uważa, że ​​to C i nie pozwala na to.