mikrocontroller.net

Forum: Compiler & IDEs Preprocessor


Autor: Karsten S. (scottyrebel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
Kann der AVR-GCC Preprocessor auch Integer-Divisions durchführen
Beispiel: 10 \ 3 = 3

Eigentlich suche ich nur eine Truncate-Function, also die 
Nachkommastellen abschneiden. Wichtig ist das die Berechnung der 
Preprocessor durchführt.

Danke für jede Hilfe

Gruß Scotty

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karsten S. schrieb:
> Hallo,
> Kann der AVR-GCC Preprocessor auch Integer-Divisions durchführen
> Beispiel: 10 \ 3 = 3

Ja, kann er.

> Eigentlich suche ich nur eine Truncate-Function, also die
> Nachkommastellen abschneiden.

Das kann er nicht, da er mit floating-point nicht umgehen kann.

> Wichtig ist das die Berechnung der Preprocessor durchführt.

Warum?

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Karsten S. schrieb:
>> Hallo,
>> Kann der AVR-GCC Preprocessor auch Integer-Divisions durchführen
>> Beispiel: 10 \ 3 = 3
>
> Ja, kann er.

seit wann? Der Preprocessor rechnet doch nicht (außer im #ifdef) sondert 
der Compiler rechnet.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Peter II schrieb:
> Rolf M. schrieb:
>> Karsten S. schrieb:
>>> Hallo,
>>> Kann der AVR-GCC Preprocessor auch Integer-Divisions durchführen
>>> Beispiel: 10 \ 3 = 3
>>
>> Ja, kann er.
>
> seit wann?

Seit es ihn gibt, vermute ich.

> Der Preprocessor rechnet doch nicht (außer im #ifdef)

Nicht in #ifdef, aber in #if. Da kann er auch die Division durchführen.
#if 10 / 3 == 3
printf("Jawohl!\n");
#endif

> sondert der Compiler rechnet.

Deshalb ja auch die Frage, warum es denn so wichtig ist, dass der 
Preprozessor das macht. Außer zur Nutzung in einer #if-Direktive fällt 
mir kein Grund dafür ein.

Autor: Hmm.. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf M. schrieb:
> Deshalb ja auch die Frage, warum es denn so wichtig ist, dass der
> Preprozessor das macht. Außer zur Nutzung in einer #if-Direktive fällt
> mir kein Grund dafür ein.

Baudraten Initialisierung?  Gib ein #define für den CPU Takt und eines 
für die gewünschte Baudrate in einer "config.h" und an geeigneter Stelle 
lässt man den Preprozessor den Wert fürs Register ausrechnen.

Autor: Rolf M. (rmagnus)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Hmm.. schrieb:
> Rolf M. schrieb:
>> Deshalb ja auch die Frage, warum es denn so wichtig ist, dass der
>> Preprozessor das macht. Außer zur Nutzung in einer #if-Direktive fällt
>> mir kein Grund dafür ein.
>
> Baudraten Initialisierung?  Gib ein #define für den CPU Takt und eines
> für die gewünschte Baudrate in einer "config.h" und an geeigneter Stelle
> lässt man den Preprozessor den Wert fürs Register ausrechnen.

Und genau das geht eben nicht (ist aber eigentlich auch nicht nötig). 
Man kann das den Preprozessor nicht ausrechenen lassen, da er, wie oben 
schon gesagt, nur in #if rechnet, weil er da selber das Ergebnis 
braucht.
#define macht nur eine Textersetztung. Es schaut nicht in den 
eingesetzten Text rein, interpretiert den irgendwie und rechnet dann 
was. Es ist so ähnlich wie die suchen/ersetzen-Funktion eines 
Texteditors. Wenn du dem sagst, er soll jedes X durch 3+3 ersetzen, dann 
macht er das. Er ersetzt es nicht stattdessen durch 6.

Autor: Bernd K. (prof7bit)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm.. schrieb:
> und an geeigneter Stelle lässt man den Preprozessor den Wert fürs
> Register ausrechnen.

Warum? Das kann doch ebenso gut der Compiler ausrechnen.

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.