char, signed char und unsigned char

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

char, signed char und unsigned char

Beitrag von Niki »

Hi,

ich muss gerade ein Stück Code schreiben, das sowohl auf Windows als auch auf Unix laufen muss. Ich kann aber grad auf Unix nicht testen.

Zwar bin ich mir 99% sicher, dass die Typen "char", "signed char" und "unsigned char" von Compilern als drei verschiedene Type angesehen werden, aber ich bin mir halt nicht 100% sicher. Kann mir kurz jemand bestätigen, dass das vorzeichenlose "char" auf Unix ein anderer Datentyp ist als "unsigned char"?

Mir geht es darum Mehrdeutigkeit in einem char_traits-ähnlichen Template zu vermeiden. Es gibt dabei eine Spezialisierung für "char" und eine für "unsigned char".

Mal so nebenbei gefragt... gibt es eigentlich mittlerweile in C++ eine Möglichkeit, dass zwei typedefs vom selben Typ als unterschiedliche Typen behandelt werden? Beispiel:

Code: Alles auswählen

typedef unsigned char Char8;
typedef unsigned char UInt8;
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: char, signed char und unsigned char

Beitrag von Krishty »

Niki hat geschrieben:Zwar bin ich mir 99% sicher, dass die Typen "char", "signed char" und "unsigned char" von Compilern als drei verschiedene Type angesehen werden, aber ich bin mir halt nicht 100% sicher.
Im Standard ist es so vorgeschrieben; es können also höchstens einzelne Compilermodelle abweichen.
Niki hat geschrieben:Kann mir kurz jemand bestätigen, dass das vorzeichenlose "char" auf Unix ein anderer Datentyp ist als "unsigned char"?
Auch Unix wird durch verschiedene Compiler bedient ;-) Welchen brauchst du? GCC 4.8.1? Dann: http://ideone.com/zVWhAi
Niki hat geschrieben:Mal so nebenbei gefragt... gibt es eigentlich mittlerweile in C++ eine Möglichkeit, dass zwei typedefs vom selben Typ als unterschiedliche Typen behandelt werden? Beispiel:

Code: Alles auswählen

typedef unsigned char Char8;
typedef unsigned char UInt8;
Nein; typedef ist nur ein Alias (und die neue using-Syntax ebenfalls). Den neuen Typ musst du dir selber bauen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

Re: char, signed char und unsigned char

Beitrag von Niki »

Herzlichen Dank, Krishty! Ich wusste doch das ich in diesem Forum an der richtigen Adresse bin :)
Krishty hat geschrieben:Auch Unix wird durch verschiedene Compiler bedient ;-) Welchen brauchst du? GCC? Dann: http://ideone.com/zVWhAi
Wahrscheinlich GCC. Ist aber zu diesem Zeitpunkt noch nicht sicher. Diese Entscheidung liegt noch ein wenig in der Zukunft und ist nicht nur von mir abhängig. Ich muss nur jetzt schon drüber nachdenken. Das einzige worauf ich bestehen werde ist das der Compiler einige neue Features wie enum class unterstützt werden.

EDIT: Mir reicht die Aussage, dass der Standard es vorschreibt.
Zuletzt geändert von Niki am 21.12.2013, 20:27, insgesamt 1-mal geändert.
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

Re: char, signed char und unsigned char

Beitrag von Niki »

Krishty hat geschrieben:Nein; typedef ist nur ein Alias (und die neue using-Syntax ebenfalls). Den neuen Typ musst du dir selber bauen.
Das ist aber auch zu schade. Einen Klassen- oder Strukturtyp für einen unsigned int bauen zu müssen fände ich irgendwie nicht so pralle. Aber egal, ich habe die Frage eh nur aus reiner Neugierde gestellt. Ein akutes Problem habe ich da momentan nicht.
Benutzeravatar
Krishty
Establishment
Beiträge: 8268
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: char, signed char und unsigned char

Beitrag von Krishty »

Krishty hat geschrieben:Auch Unix wird durch verschiedene Compiler bedient ;-) Welchen brauchst du? GCC? Dann: http://ideone.com/zVWhAi
Wahrscheinlich GCC. Ist aber zu diesem Zeitpunkt noch nicht sicher. Diese Entscheidung liegt noch ein wenig in der Zukunft und ist nicht nur von mir abhängig. Ich muss nur jetzt schon drüber nachdenken. Das einzige worauf ich bestehen werde ist das der Compiler einige neue Features wie enum class unterstützt werden.
In diesem Fall kannst du auch auf die char-unsigned char-Unterstützung zählen, denke ich. Probleme würdest du nur bei Nischen-Compilern (z.B. für Mikrocontroller) und ururalt-GCC-Versionen kriegen; ich kenne sowas nur von Visual C++ von vor über 15 Jahren.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Niki
Establishment
Beiträge: 309
Registriert: 01.01.2013, 21:52

Re: char, signed char und unsigned char

Beitrag von Niki »

Krishty hat geschrieben:In diesem Fall kannst du auch auf die char-unsigned char-Unterstützung zählen, denke ich. Probleme würdest du nur bei Nischen-Compilern (z.B. für Mikrocontroller) und ururalt-GCC-Versionen kriegen; ich kenne sowas nur von Visual C++ von vor über 15 Jahren.
Gut zu wissen. Ich musste bisher nie wirklich drüber nachdenken. Erstaunlich über was für Dinge man ins Grübeln kommt, wenn man plötzlich mal etwas anderes als das Gewohnte benutzen muss. Ich habe zwar schon andere Compiler benutzt, aber da war immer noch was anderes dahinter, wie Qt oder Cocoa, wodurch sich das Denken erübrigte.

Vielen Danke nochmals :)
Antworten