Mit Präprozessor Variable auf Existenz prüfen

OP #1504320
Kann man mit dem Präprozessor irgendwie abfragen, ob eine Variable 
existiert?
Ich möchte eine Software schreiben, die auf mehreren verschiedenen 
Controllern einer Familie läuft. Diese besitzen z.B. unterschiedliche 
Anzahlen an Pins, die ich setzen muss.
Also quasi sowas in der Art:
1
#if exists (PORTA)
2
 PORTA=0xFF;
3
#endif
4

5
#if exists (PORTB)
6
 PORTB=0xFF;
7
#endif
Moderator Persönliche Seite
Benedikt K. schrieb:
> Kann man mit dem Präprozessor irgendwie abfragen, ob eine Variable
> existiert?

Nein, der Präprozessor kennt keine Variablen, die kennt erst der
Compiler.

> Also quasi sowas in der Art:
>
1
> #if exists (PORTA)
2
>  PORTA=0xFF;
3
> #endif
4
> 
5
> #if exists (PORTB)
6
>  PORTB=0xFF;
7
> #endif
8
>

Das geht, zumindest beim AVR-GCC/avr-libc, da hier PORTA usw. als
Präprozessor-Makros realisiert sind.  Ist allerdings leider nicht
portabel zu anderen Compilern, zumindest vom IAR weiß ich, dass er
die Definitionen der Ports nicht auf Präprozessor-Ebene macht.
1
#ifdef PORTA
2
...
3
#endif
4

5
/* bzw. */
6

7
#if defined(PORTA)
8
...
9
#endif
Gast
Ich denke das müsste mit #ifdef PORTA funktionieren. Die Registernamen 
sind doch Präprozessormakros. Und das devicespezifische Include, 
definiert nur die vorhandenen Ports.
OP
Es handelt sich zwar um einen gcc Compiler, allerdings nicht für den 
AVR, sondern für die dsPICs von Microchip. Dort sind die Register alle 
so deklariert:
1
extern volatile unsigned int  PORTB __attribute__((__sfr__));
Von daher funktioniert #ifdef leider nicht.

Ich könnte zwar den Weg über den Controllernamen gehen und so 
entscheiden welche Ports ich initialisieren muss, da die Anzahl an Ports 
aber kleiner ist als die Anzahl an Controllern wäre mir der andere Weg 
lieber.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.