Forum: Compiler & IDEs kleine C fragen...


von Bobby (Gast)


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..

von Christian Schifferle (Gast)


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

von Bobby (Gast)


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.

von Christian Schifferle (Gast)


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.

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
Noch kein Account? Hier anmelden.