kleine C fragen...

Gast #6088
Lesenswert?

also ich da mal zwei c fragen:

1. was ist der unterschied zwischen "char" und "const char"
ich weiss das ich mit der zweiten version dem compiler sage, dass die 
variable einen festen wert hat und nicht verändert wird aber welchen 
vorteil bringt mir das?

2. wo liegt der unterschied zwischen "BYTE" und "CHAR" bzw. "Unsigned 
Char"?  für mich ist ein char ein byte..
Gast #6089
Lesenswert?

Zu 1:
const heisst nur, dass der Compiler dich anmeckert, wenn du versuchst, 
in diese Variable zu schreiben. In anderen Programmiersprachen gibt es 
dazu echte Konstanten, in C allerdings nicht, d.h auch eine 
const-Variable ist letztendlich nur eine Variable.

Zu 2:
Ein BYTE ist gemäss Definition immer 8 Bit breit.
Ein CHAR ist so gross, dass es ein einzelnes Zeichen des von der 
Zielmaschine verwendeten Zeichensatzes aufnehmen kann. Wir sind uns 
8-Bit Zeichensätze gewöhnt. Bei UNICODE allerdings ist ein Zeichen 16 
Bit breit. Somit können in Unicode über 65000 Zeichen dargestellt 
werden, mit unserem mickrigen ANSI-Zeichensatz lediglich deren 255.
Unsigned bedeutet lediglich, dass der Wert vorzeichenlos behandelt wird, 
also der Wertebereich 0 bis zur Obergrenze geht. Dies ist vor allem bei 
Vergleichen (z.B. x < 0 bei einer unsigned Variable ist quatsch) zu 
berücksichtigen.
Bei Variablen ohne dem unsigned Attribut wird normalerweise das 
höchstwertige Bit für das Vorzeichen verwendet.

Gruss
Christian
Gast #6090
Lesenswert?

hey super danke...

zu 2:

also wenn ich das dann richtig verstehe sollte ich um flexiblen code zu 
schreiben und ich weiss das mein bereich zwischen 0-255 liegt besser ein 
byte nehmen...mit flexible meine ich leicht portable auf andere 
controller deren zeichensatz auf dem unicode beruht. Um z.b der gefahr 
zu entgehen mehr also nötigen speicher zu reservieren.
Gast #6091
Lesenswert?

Im Prinzip hast du durchaus recht, bloss gibt es in C keinen dedizierten 
Datentypen, um ein BYTE darzustellen.
Wenn du aber mit einem eigenen typedef operierst kannst du durch eine 
einfache Anpassung deines typedef Befehls deinen Datentypen BYTE an 
jeden Compiler anpassen.
Für "übliche" Systeme, bei denen halt ein char 8 Bit breit ist müsstet 
du folgenden Typedef irgendwo in einem Headerfile einbauen:

typedef unsigned char BYTE;

Wenn du jetzt konsequent den Datentypen BYTE für 8-Bit Variablen 
verwendest, dann ist die Portierung auf jedes andere Zielsystem ein 
Kinderspiel.

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