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


von fraujansen (Gast)


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

von Mupfel (Gast)


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.

von (prx) A. K. (prx)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.