Frage zu Präprozessor-Code

Gast #1983971
Lesenswert?
• ▲
▼
Hallo Experten!
ich habe eine Frage zu Preprozessor und mein C-Code...

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

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

so... nun wenn ich im C-Code folgendes schreibe
1
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:
1
int i=5
2
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
Gast #1983983
Lesenswert?
• ▲
▼
Du meintest vermutlich:
1
int i=5
2
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.

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.