Moin, ist es möglich sich die Berechnung auswerfen zu lassen?
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
|
Anzeige
|
C - Bedingte KompilierungMoin, ist es möglich sich die Berechnung auswerfen zu lassen?
Gast
#5520912
Ähmm??? Wenn Du sie ausdruckst, wird sie eventuell aus dem Druckerschacht ausgeworfen.
Gast
#5520917
Du willst TIMER_CALC berechnet haben? Nein, das ist nicht möglich. :P Da fehlt uns der Wert F_CPU. ;)
Gast
#5520918
Währe in deinem Fall eventuell static_assert geeignet? https://en.cppreference.com/w/c/language/_Static_assert
Gast
#5521021
Die Ausgabe des Ergebnisses geht nicht. Der Schlüssel dazu ist die Unterscheidung zwischen Präprozessor und Compiler. Der Präprozessor ersetzt TIMER_CALC wortwörtlich durch das, was dahinter steht, und rechnet nicht etwa das aus. Erst der Compiler analysiert überhaupt erst den Ausdruck, und es steht ihm frei, schon bei der Kompilierung des Ausdruck zu berechnen (sofern ...), oder aber ihn erst zur Laufzeit ausrechnen zu lassen. Wenn der Ausdruck in einem #if verwendet wird, kann zwar auch der Präprozessor ihn auswerten, allerdings mit großen Einschränkungen. Aber Ausgeben wie beim printf oder so sind nicht möglich. Dsgl. bei static_assert. PS Das #if TIMER_PRESCALER == 1 ... #endif geht kürzer mit: #define _TIMER_PRESCALER_gc(pre) TC_CLKSEL_DIV ## pre ## _gc #define TIMER_PRESCALER_gc(pre) _TIMER_PRESCALER_gc(pre) und danach etwas wie int val = TIMER_PRESCALER_gc(TIMER_PRESCALER); Einfach mal den Präprozessor-Output ansehen (bei gcc mit '-E'). Hallo Jan, Du möchtest eine Compiler Directive nutzen, um während der "Compilation" ein Rechenwert auszudrucken? Gibt es ein Handbuch zum Compiler? Was sagt das Stichwort "Directive" dazu? Falls Du es nicht gleich findest, versuche einmal Dir aktuelle Uhrzeit oder das Datum während der Compilation auszudrucken. Mit Rechenergebnissen geht das genauso. Oder Du guckst in das Listing. Allerdings rechnen die Compiler nicht immer so viel aus, wie später das Target. Oder habe ich etwas falsch verstanden? Happy coding! Bernd Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|