Forum: Mikrocontroller und Digitale Elektronik Adresse eines "#define"-Wertes


von PTR (Gast)


Lesenswert?

Hi Leute,

gibts ne Möglichkeit die Adresse eines Wertes, der mit "#define" 
festgelegt wurde zu ermitteln?

Ich muss in einer Funktion eine Adresse übergeben, und eben hierfür 
benötige ich quasi genau diese Adresse.

Beispiel:

#define Wert 5

result = MakeSomething((unsigend char*) & Wert);

Danke.

von Peter II (Gast)


Lesenswert?

hast du überhaupt eine Ahnung was ein define ist?

Der compiler sieht nichts von einen Define und der linker auch nichts.

von nicht "Gast" (Gast)


Lesenswert?

Ei Ei Ei

#define ist ein Präprozessormakro, der Compiler bekommt das überhaupt 
nicht zu Gesicht, es existiert dann nämlich schon nicht mehr.

http://de.wikipedia.org/wiki/C-Pr%C3%A4prozessor

von Niemand (Gast)


Lesenswert?

Hi,

#defines werden vom Preprocessor verarbeitet, ein Programm vor dem 
eigentlichen Compiler, welches relativ "dumm" nur Textersetzungen macht. 
Überall, wo in Deinem Programm "Wert" steht, wird dann "5" stehen.
Damit wird die Zeile zu

result = MakeSomething((unsigend char*) & 5);

"5" ist in dem Fall eine Konstante und somit hat sie keine Adresse.

von kolabier (Gast)


Lesenswert?

#define WERT 5

unsigned char v = WERT;

result = MakeSomething(&v);

von nicht "Gast" (Gast)


Lesenswert?

kolabier schrieb:
> #define WERT 5
>
> unsigned char v = WERT;
>
> result = MakeSomething(&v);
Klar, nur wird eben nicht die Adresse vom #define übergeben sondern 
die einer normalen Variable. Ich glaube der TO hat da eine Wissenslücke.

von Guru (Gast)


Lesenswert?

Die Frage zeigt ein klares Missverständnis auf. Das ist hier schon 
beleuchtet worden, allerdings könnte man nach meiner Meinung noch eine 
weitere Sichtweise anfügen um es weitergehend zu beleuchten.

Die Frage ist ob ein "Wert" überhaupt Speicherplatz belegt, so das man 
die Adresse dieses Speicherplatzes ermitteln kann.

Die Preprozessoranweisungen erlauben nicht einen Speicherplatz zu 
belegen. Vielmehr (das wurde hier schon geschrieben) dient der #define 
Ausdruck nur dazu später im Programm Textersatz vorzunehmen.

C hingegen erlaubt es Speicherplatz zu belegen. Üblicherweise sind das 
Variablen (und Funktionen). Deren Adresse kann man ermitteln. Der 
entsprechende Terminus im Deutsch ist "Definition" mit der Anwendung 
"Eine Variable wird definiert".

Möglicherweise ist hier beim flüchtigen Lesen eine Verwechselung 
zwischen dem #define des Preprozessors und der "Definition" mit Wirkung 
der Belegung von Speicherplatz in C entstanden. Obwohl man das "define" 
aus dem Englischen auch mit "definiere", "definieren", "Definition" 
übersetzen bzw. abstrahieren könnte, entspricht sich die "Wirkung" 
dieser beiden Vorgänge nicht. Die entsprechende Anwendung im 
Preprozessor heisst, wenn man denn das Wort "definiere" verwenden will 
(und das ist sicher zulässig): "Definiere Textersatz". Wo der 
Unterschied ist, wurde hier schon geschrieben.

Ich hoffe das hilft.

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.