Hallo, eingeleuchtet ist mir noch nicht wo der praktische Unterschied bei den beiden Variablen-Deklarationen ist; char vs. int8_t unsigned char vs. uint8_t etc. Ich habe beide Schreibweisen, teils im gleichen Quellcode gelesen. Handelt es sich um reine Geschmackssache, oder gibt es ernstzunehmende Unterschiede zw. den beiden Typen-Deklarationen?
Hallo, char ist identisch zu int8_t und unsigned char zu uint8_t! Im Grunde ist es also Geschmacksache, aber man sieht bei der Definition von uint8_t sofort welche Breite die Variablen haben! lg
Student schrieb: > char ist identisch zu int8_t Nein. 'signed char' wäre identisch. Ein 'char' ist ein dritter Typ, der weder signed noch unsigned ist. Klar, auf binärer Ebene muss er natürlich eines von beiden sein, aber was ist nicht festgelegt, der Compiler entscheidet das (oder halt der User über Optionen).
DANKE! Hatte ich mir schon gedacht, war aber doch etwas unsicher, weil beide gemischt verwendet wurden.
Die Aussage, das char = int8_t ist beruht auf Informationen in CPU-spezifischen Header Dateien. Sie gilt also für einige CPU's, aber nicht zwangsläufig für alle. Ich glaube, dass sie beim gcc für alle 8 bit CPU's gilt.
Stefan Ernst schrieb: > Klar, auf binärer Ebene muss er > natürlich eines von beiden sein Auf binärer Ebene ist erst einmal alles nur eine (8 Bit lange) Folge von 0ern und 1ern. Der CPU ist das relativ egal, wie wir als Menschen es dann interpretieren bzw. welche Operationen wir damit durchführen lassen.
Stefan schrieb: > Die Aussage, das char = int8_t ist beruht auf Informationen in > CPU-spezifischen Header Dateien. Sie gilt also für einige CPU's, aber > nicht zwangsläufig für alle. > > Ich glaube, dass sie beim gcc für alle 8 bit CPU's gilt. Nein, denn wie bereits gesagt: int8_t = signed char = unbestimmte Signedness Ein int8_t kann man höchstens mit 'signed char' gleichsetzen, aber nie mit 'char'.
K. B. schrieb: > Stefan Ernst schrieb: >> Klar, auf binärer Ebene muss er >> natürlich eines von beiden sein > > Auf binärer Ebene ist erst einmal alles nur eine (8 Bit lange) Folge von > 0ern und 1ern. Der CPU ist das relativ egal, wie wir als Menschen es > dann interpretieren bzw. welche Operationen wir damit durchführen > lassen. Ach Herrgott, mit "binärer Ebene" meinte ich hier natürlich den vom Compiler generierten Code. Der muss natürlich ein 'char' entweder signed oder unsigned interpretieren, auch wenn er auf C Ebene eben weder das eine, noch das andere ist.
char: Eine Variable für ASCII Zeichen welche 8 oder mehr Bit haben kann. Dies ist grundsätzlich vom verwendeten System bzw. Plattform abhängig. int8_t: Die Variable vom Typ int (Integer) kann 8 oder mehr Bits haben, mal wieder vom System/Plattform abhängig. int8_t wurde definiert um klar zu zeigen das dieser typ immer 8 Bit breit ist, egal auf welchem System/Plattform. Zum Thema signed und unsigned muss ich denke ich nichts sagen. mfg xerox
Das Vorzeichen von "char" ist iplementation defined, d.h. wird durch die Implementation gegeben. Beim GCC wiederum legt die Implementation das Vorzeichen von char nicht unmittelbar fest, sonders es wird festgelegt durch das jeweilige ABI. Da nicht gesagt wurde, um welche Implementation es sich handelt, kann daher auch nichts über das Vorzeichen von char gesagt werden. Beim avr-gcc etwa ist char Vorzeichenbehaftet, siehe das avr-gcc ABI http://gcc.gnu.org/wiki/avr-gcc#ABI Allerdings verwenden viele Anwender ein anderes ABI — i.d.R ohne sich dessen bewusst zu sein.
__Son´s Bersi__ schrieb: > Handelt es sich um reine Geschmackssache, oder gibt es ernstzunehmende > Unterschiede zw. den beiden Typen-Deklarationen? Zu dem Thema gibt es hier einen Artikel: http://www.mikrocontroller.net/articles/Plattformunabh%C3%A4ngigkeit
Fabian O. schrieb: > Zu dem Thema gibt es hier einen Artikel: > http://www.mikrocontroller.net/articles/Plattformu... ... doch ein äußerst anspruchsvolles Thema! Wenn ich es richtig verstehe, ist die interessanteste 8bit-Deklaration "int_fast8_t" und "uint_fast8_t", da hier die größten hardwareabhängigen Kompatibilitätsprobleme auftreten können.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.