Forum: Compiler & IDEs Preprocessor


von Karsten S. (scottyrebel)


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

von Rolf M. (rmagnus)


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?

von Peter II (Gast)


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.

von Rolf M. (rmagnus)


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

von Hmm.. (Gast)


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.

von Rolf M. (rmagnus)


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.

von Bernd K. (prof7bit)


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.

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.