www.mikrocontroller.net

Forum: Compiler & IDEs kleine C fragen...


Autor: Bobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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..

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bobby (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.