AVR//C// Variablen-Typen unterschiede

OP #3062717
Lesenswert?

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?
Gast #3062799
Lesenswert?

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.
Gast #3062820
Lesenswert?

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.
#3062834
Lesenswert?

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'.
#3062847
Lesenswert?

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.
#3062865
Lesenswert?

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
Persönliche Seite #3062880
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren