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?
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.