Adresse eines "#define"-Wertes

Gast #2162958
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.
Gast #2162968
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.
Gast #2163085
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren