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

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.