Präprozessor #if Vergleich

OP #2936179
Lesenswert?
• ▲
▼
Hallo,

möchte in meinem Quelltext prüfen, ob F_CPU definiert ist gleichzeitig 
sicherstellen, dass dieser auf die gewünschte Frequenz eingestellt ist.

Dazu:
1
/* F_CPU definiert? Falls nicht, setzte es auf 32e6UL. */
2
#ifndef F_CPU
3
#define F_CPU 32e6UL
4
#endif
5

6
/* Falls F_CPU defeniert (in anderern Header Dateien), prüfe ob F_CPU==32e6UL. */
7
#if (F_CPU != 32e6)
8
#error F_CPU ist ungleich 32e6
9
#endif

Beim der Zeile
1
#if (F_CPU != 32e6)
bekomme ich den Fehler
1
floating constant in preprocessor expression

Was mache ich falsch?
Gast #2936186
Lesenswert?
• ▲
▼
du brauchst den 2. check überhaupt nicht.

lege es im makescript fest und nicht in den Header Dateien! Wenn jetzt 
im Quellcode jemand verscuht das Define anzulegen oder auf einen anderen 
wert zu setzen bekommt man einen fehler.
#2936193
Lesenswert?
• ▲
▼
Laber Keks schrieb:
> Hallo,
>
> möchte in meinem Quelltext prüfen, ob F_CPU definiert ist gleichzeitig
> sicherstellen, dass dieser auf die gewünschte Frequenz eingestellt ist.

Es zeigt sich immer öfter, dass dies scheinbare Sicherung ein Boomerang 
ist.

Wenn F_CPU nicht im makefile oder den Project Options definiert ist, 
dann sollte man das tatsächlich als Fehler werten und keinen Default 
machen. Das Nachtragen ist kein Aufwand und es vermeidet 
Fehlersituationen in denen unterschiedliche C-Files unterschiedliche 
Werte für F_CPU benutzen.
Gast #2936202
Lesenswert?
• ▲
▼
Peter II schrieb:
> du brauchst den 2. check überhaupt nicht.

Ich würde sagen, er braucht den ersten Check nicht (bzw. ist sogar 
kontraproduktiv). Wenn das danach folgende Programm davon abhängt, dass 
32 MHz eingestellt sind, ist der zweite Check schon sinnvoll.

Du musst einfach 32000000UL statt 32e6 schreiben, denn 32e6 ist eine 
Fließkommazahl und kein Integer.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.