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.
hast du überhaupt eine Ahnung was ein define ist? Der compiler sieht nichts von einen Define und der linker auch nichts.
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
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.
#define WERT 5 unsigned char v = WERT; result = MakeSomething(&v);
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.