mikrocontroller.net

Forum: Compiler & IDEs Frage zu Präprozessor-Code


Autor: fraujansen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Experten!
ich habe eine Frage zu Preprozessor und mein C-Code...

1. in meiner header-Datei hab ich folgendes
#define SENSOR_0  0xe0  
#define SENSOR_1    0xe2  
#define SENSOR_2    0xe4  
#define SENSOR_3   0xe6  
#define SENSOR_4   0xe8  
#define SENSOR_5   0xea  
#define SENSOR_6   0xec  

und dazu diese makro-Funktion
#define getSensAdr(NR) SENS_ADR_##NR

so... nun wenn ich im C-Code folgendes schreibe
getSensAdr(5)
 bekomme ich den Wert 0xea zurück, bis dahin alles super ist genau das 
was ich will!

doch das Problem ist wenn ich anstatt einen int, eine Variable übergeben 
will, zB. so:
int i=5
getSensAdr(5)

dann bekomme ich folgende Fehlermeldung vom Compiler (gcc)
../sensor.c:46: error: 'SENS_ADR_i' undeclared (first use in this 
function)

irgendwie muss das auch gehen oder nicht?
irgendwie mit # und mit ##...
irgendeine Idee???

Vielen Dank!
schöne Grüße

Autor: Mupfel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meintest vermutlich:
int i=5
getSensAdr(i)

oder?

>irgendwie muss das auch gehen oder nicht?

So? Warum?

Denk dran, das der Präprozessor, vor der eigentlichen Kompilierung den 
Text liest und lediglich Textersatz durchführt. Er weiss nichts von C, 
von Variablen oder sonstwas.
Er kennt nur Text. Deswegen hat er aus dem "getSensAdr(i)" auch ganz 
folgerichtig "SENS_ADR_i" gemacht.
Das i für eine Variable steht interessiert den Präprozessor überhaupt 
nicht.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Präprozessor macht Textersetzung bevor der Compiler selbst den Code 
sieht. Vom Inhalt der Variablen weiss er nichts, nicht einmal, dass i 
eine solche ist.

Ein Array wäre hier angesagt.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.