Problem mit #define in C

Gast #3810112
Lesenswert?
• ▲
▼
Hallo C-Experten :)

Beim einbinden der Standard Peripherals Library für einen STM32F3 
Controller in meine GCC-Compiler Umgebung habe ich folgendes Problem. 
DIE IDE setzt für diesen Compilertyp noch die Präprozessor-Definition 
'STM32F30X', die aktuelle Library erwartet aber 'STM32F303xC'. Soweit 
kein Problem, denn in der Datei 'stm32f30x.h' ist folgendes enthalten:
1
#if defined(STM32F30X) 
2
  #define STM32F303xC
3
#endif
Allerdings tritt dann in der gleichen Datei weiter unten an folgender 
Stelle ein Compiler-Fehler auf:
1
typedef enum IRQn
2
{
3
  NonMaskableInt_IRQn         = -14,
4
  ...
5
  #ifdef STM32F303xC 
6
  WWDG_IRQn                   = 0,
7
  ...
8
  FPU_IRQn                    = 81
9
  #endif /* STM32F303xC */
10
  #ifdef STM32F334x8 
11
  WWDG_IRQn                   = 0,  //expected ',' or '}' before 'WWDG_IRQn'
12
  ...
13
} IRQn_Type;
Füge ich händisch die Präprozessor-Definition 'STM32F303xC' hinzu, so 
tritt der Fehler nicht auf, allerdings an allen möglichen Stellen 
'"STM32F303xC" redefined [enabled by default]'.

Woher kommt das Verhalten, dass sich die beiden genannten Fälle 
unterscheiden und wie könnte ich es hinkriegen, dass der Compilerfehler 
mit der Definition aus der Datei nicht auftritt?

Vielen Dank für Antworten,

Florian
Gast #3810118
Lesenswert?
• ▲
▼
Doch, prinzipiell ist das schon das letzte Element, denn wenn er in 
'#ifdef STM32F303xC' reinspringt, dann sollte er in keines der darauf 
folgenden ifdefs mehr reinspringen. Der Code ist korrekt, so denke ich, 
da er von STMicro direkt stammt. Das verwirrende ist ja, dass der Code 
kompiliert wenn ich das #Define in den Präprozessor-Direktiven setze, 
aber nicht mehr wenn das #define in der Quellcode-Datei geschieht. Und 
zwar in der gleichen Datei, wo der Fehler auftritt.

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.