Ich habe ein Legacy-Projekt für einen alten Compiler, an den wir ein Compiler-Flag übergeben (so etwas wie -DCHAR_AS_UNSIGNED), um den 'char'-Typ als unsigned zu behandeln. Der Compiler ist ein wirklich alter proprietärer Compiler, den wir separat in der Befehlszeile anstelle von Eclipse ausführen. Es gibt sehr viel alten Code, der unsigned char * für Strings anstelle von char * verwendet. Standardmäßig behandelt Eclipse dies so, wie es sollte, und warnt davor, dass die Übergabe von unsigned char * an Routinen, die char * erwarten, nicht richtig ist. Gibt es eine Möglichkeit, dass Eclipse diese ignoriert und wie unser Compiler behandelt?Eclipse CDT - Behandle 'char' als unsigned
0
A
Antwort
0
Das nächste, was ich erreichen konnte, war das Hinzufügen eines global definierten Symbols zum Projekt (Projekt -> Eigenschaften -> Pfade und Symbole -> Symbole) welches char
als unsigned char
definiert.
Zum größten Teil funktioniert es, da die meisten der Legacy-Code, mit denen ich mich befasse, nicht bereits unsigned char (das würde mit dieser Problemumgehung). Es scheint sich sogar gut mit den typedefs zu verhalten, die wir für ganzzahlige Arten spezifischer Breiten haben (U8
zum Beispiel ist definiert als typedef unsigned char U8
). Diese Lösung funktioniert nicht gut, wenn unsigned char
in Dateien verwendet wird, da es auf unsigned unsigned char
erweitert wird.
Vielleicht deaktivieren Code-Analyse? 'Einstellungen-> C/C++ -> Code Analysis' (Ich habe es immer ausgeschaltet, weil der Compiler gute Warnungen gibt) – Galik
Das ist leider ein ziemlich großer Hammer. Es ist ziemlich praktisch, einige Fehler in Echtzeit zu sehen, während ich arbeite. Ich habe die Einstellung "ungültige Argumente" in den Code Analysis-Einstellungen zu einer "Info" im Gegensatz zu einem "Fehler" geändert, aber das birgt auch das Risiko, einen Fehler bis zur Kompilierungszeit zu maskieren. –
Der C++ - Standard besagt, dass 'char' nach dem Ermessen der Implementierung als vorzeichenbehafteter oder vorzeichenloser Integertyp fungieren kann, aber in beiden Fällen ist es immer noch ein eigener Typ von" signed char "und" unsigned char ". Das bedeutet, dass es nicht zulässig ist, ein 'unsigned char *' an eine Funktion zu übergeben, die ein 'char *' erwartet. Wenn Ihr Compiler dies akzeptiert, handelt es sich um eine nicht standardmäßige Erweiterung, die von Ihrem Compiler unterstützt wird und von CDT nicht unterstützt wird. – HighCommander4