Forum: Compiler & IDEs Precompiler rechnen lassen


von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Nur zur Sicherheit:
1
#define STR_HELPER(x) #x
2
#define STR(x) STR_HELPER(x)
3
4
#define TWI_TWBR ((F_CPU/SCL_CLOCK)-16)/2
5
6
#if TWI_TWBR <= 10                      /* must be > 10 for stable operation */
7
    #error TWBR to small
8
#endif
9
10
#if TWI_TWBR > 255
11
    #error TWBR is 8Bit
12
#else
13
    #pragma message "TWI Bit rate Register:" STR(TWI_TWBR)
14
#endif

Wird mir nie ein Rechenergebnis mitteilen, weil der Preprozessor stehts 
Ersetzt und erst zur Laufzeit ein printf(%d, TWI_TWBR) möglich wäre (was 
ich auf einem AVR jedoch nicht gebrauchen kann), richtig?

Ausgabe de Build:
1
Anmerkung: #pragma message: TWI Bit rate Register:((8000000UL/100000L)-16)/2
2
 #pragma message "TWI Bit rate Register:" STR(TWI_TWBR)

Grüße David

von Yalu X. (yalu) (Moderator)


Lesenswert?

Der Präprozessopr rechnet nur in #if-/#elif-Abfragen. Folgendes wäre
also möglich:

1
#if TWI_TWBR <= 10
2
    #error TWBR to small
3
#elif TWI_TWBR == 11
4
    #pragma message "TWI Bit rate Register: 11"
5
#elif TWI_TWBR == 12
6
    #pragma message "TWI Bit rate Register: 12"
7
...
8
#elif TWI_TWBR == 254
9
    #pragma message "TWI Bit rate Register: 254"
10
#elif TWI_TWBR == 255
11
    #pragma message "TWI Bit rate Register: 255"
12
#else
13
    #error TWBR is 8Bit
14
#endif

von #define (Gast)


Lesenswert?

Nein, da muss nur noch eine weitere Expansion ins Makro:
http://www.decompile.com/cpp/faq/file_and_line_error_string.htm

von Rolf M. (rmagnus)


Lesenswert?

#define schrieb:
> Nein, da muss nur noch eine weitere Expansion ins Makro:
> http://www.decompile.com/cpp/faq/file_and_line_error_string.htm

Dort wird überhaupt keine Berechnung durchgeführt. Aber es würde auch 
nichts daran ändern, dass der Präprozessor nun in #if/#elif rechnet.

Beitrag #5872663 wurde von einem Moderator gelöscht.
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.