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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.