mikrocontroller.net

Forum: Compiler & IDEs Verständnis einer Codezeile


Autor: josch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich (C-Newbie) versuche gerade ein Programm nachzuvollziehen und hänge
an einer Stelle.

Da steht:
prescaler = (uchar)DEBOUNCE;

Ist das nun das Gleiche wie:
uchar DEBOUNCE;
prescaler = Debounce;

Oder hat die Klammer noch ne spezielle Bedeutung, die mir bisher
Verborgen geblieben ist.

viele Grüsse
josch

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Debounce wird wohl weiter vorne als Konstante definiert sein.

(uchar)DEBOUNCE ist ein typecast , d.h. damit sagst Du dem Compiler,
diese Konstante als uchar = 8-Bit-Wert zu betrachten. gcc neigt sonst
dazu, Konstanten als 16-Bit-Zahl zu interpretieren. Das Ganze ist also
eine Code-Optimierung.

>Ist das nun das Gleiche wie:
>uchar DEBOUNCE;
>prescaler = Debounce;

Nicht ganz. Von der Funktionalität schon, aber der Code wird etwas
anders aussehen (Zuweisung einer Variablen statt einer Konstanten).
Wenn es Dich interessiert, dann schau Dir mal den erzeugten
Assembler-Code an.

Stefan

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das typecast wird oft gemacht, um Compilerwarnungen zu vermeiden und
manchmal auch zum optimieren.


Peter

Autor: josch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Stefan - Superantwort

Das mit der 16-Bit-Verarbeitung von 8-Bit-Werten hab ich neulich
schonmal irgendwo aufgeschnappt und als Expertenwissen abgetan. Ich
ahnte nicht, dass mich das so schnell einholt.
wieder was gelernt :)

viele Grüße
josch

Autor: josch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hehe - Peter
Es ist Dein Code, an dem ich gerade rumknacke...
Irgendwann versteh ich ihn vielleicht :)

Gruss josch

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.