Preprocessor

OP #4731707
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
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?
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.
1
#if 10 / 3 == 3
2
printf("Jawohl!\n");
3
#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.
Gast
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.
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.