2013-07-01 4 views
5

Es ist immerhin in stddef.h und C definiert erhalten ++ config.h:Eclipse-CDT-Code-Analyse denkt size_t mehrdeutig ist

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; 

Also, wenn eine Datei using namespace std der Fall ist, wird die Eclipse-CDT-Code-Analyse verwirrt und sagt das Symbol nicht eindeutig ist. Ich weiß nicht, wie gcc damit umgeht, aber hat irgendjemand irgendwelche Vorschläge, was man für die Analyse des Eclipse-Codes tun sollte?

+0

In dem Code, den Sie zeigen, ist size_t nur in C++ config.h definiert. __SIZE_TYPE__ ist in stddef.h definiert und wird in C++ config.h verwendet - was ist das eigentliche Problem? – Mark

+0

@Mark Hoppla, in die falsche Zeile kopiert. Jetzt behoben. Vielen Dank! – Chris

+0

WHere in der Datei machst du die Verwendung? – Mark

Antwort

4

Ich habe das umgangen, indem ich diesen Fehler in der Codeanalyse komplett deaktiviert habe.

Projekt -> Eigenschaften -> C/C++ Allgemein -> Code-Analyse

'mehrdeutiges Problem' Uncheck

1

Es ist meistens, aber nicht ganz richtig, dass gültige C-Code gilt auch C++ Code. Sie haben einen Fall getroffen, in dem das nicht stimmt. Diese Frage hat eine sehr gute Antwort auf den Unterschied in diesem Fall: Repeated typedefs - invalid in C but valid in C++? Es ist auch erwähnenswert, dass C11 diese Inkompatibilität beheben wird.

Das Ergebnis ist wirklich, dass dieses Verhalten irgendwo zwischen einem Mangel und einem Defekt in der CDT-Code-Analyse ist. CDT sollte wissen, dass der Code C++ ist und die Syntax zulässt, aber es scheint, als ob es denkt, dass es C ist und es ablehnt.