totto141083 Geschrieben 17. September 2001 Geschrieben 17. September 2001 Wie muss eine Funktion aufgebaut sein, damit ich dauerhaft die gleichen Variablennamen benutzen kann? Gibt es ein Beispiel hierzu? Gruß Totto Zitieren
maddin Geschrieben 17. September 2001 Geschrieben 17. September 2001 irgendwie verstehe ich deine frage nicht so ganz. was meinst du mit "dauerhaft den gleichen variablennamen benutzen" ??? Zitieren
totto141083 Geschrieben 17. September 2001 Autor Geschrieben 17. September 2001 Ich möchte eine Variable namentlich nicht abändern, d. h. den Unterschied zwischen lokalen und globalen Variablen. Falls diese Möglichkeit nicht besteht, wie kann ich die verschiedenen Werte in die unterschiedlichen Variablennamen übergeben? Gruß Totto Zitieren
TingleTangle Geschrieben 17. September 2001 Geschrieben 17. September 2001 Damit du Variablen in allen Funktionen benuzten kannst musst du sie global deklarieren. Sprich: du setzt die Deklaration einfach ausserhalb aller Funktionen, am besten an den Anfand eines Moduls oder in einem Headerfile. Wenn du eine Variable aus einem anderen Modul benutzen willst, musst du Sie mit einem extern-Statement in dem Modul deklarieren in dem du Sie brauchst. Ich hoffe, dass das deine Frage beantwortet. <FONT COLOR="#a62a2a" SIZE="1">[ 17. September 2001 15:32: Beitrag 1 mal editiert, zuletzt von DocNeo ]</font> Zitieren
totto141083 Geschrieben 17. September 2001 Autor Geschrieben 17. September 2001 Was meinst du mit einem extern Statement. Vielleicht ein kurzes Beispiel. Totto Zitieren
haka Geschrieben 17. September 2001 Geschrieben 17. September 2001 z.B. extern int irgendnennamen; Extern heisst das hier kein Speicherbereich für die Variable reserviert wird sondern es wird nur eine Variable mit dem Namen irgendnennamen dem Compiler bekannt gegeben. Da der Compiler beim kompilieren die Variablen nicht in Speicheradressen sondern in Form von symbolischen Namen in die Objektdateien schreibt reicht den Compiler dies. Die Umsetzung in Speicheradressen wird vom Linker vorgenommen. Er sucht alle Objektdateien( erstellt vom Compiler aus den Sourcedateien, bzw. wie sie in bestimmten zum Projekt gehörenden Standardlibraries ) nach dem dem Objekt in dem für dieses Symbol wirklich Speicher allokiert wurde d.H. in dem die Variable als nicht extern deklariert wurde) und setzt dann beim Linkvorgang den smbolischen Namen in die korrekte Speicheradresse um. Findet er in den zu linkenden Objektdateien keinen passenden Eintrag erhällst du vom Linker eine Fehlermeldung über ein nicht aufgelöstes Symbol. haka Zitieren
gajUli Geschrieben 17. September 2001 Geschrieben 17. September 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von totto141083: <STRONG>Wie muss eine Funktion aufgebaut sein, damit ich dauerhaft die gleichen Variablennamen benutzen kann? </STRONG> Zitieren
hoagi Geschrieben 17. September 2001 Geschrieben 17. September 2001 Mit Verlaub und als nichtmoderator, dat hab ich jetzt nicht verstanden. :confused: Hoagi Zitieren
gajUli Geschrieben 17. September 2001 Geschrieben 17. September 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von hoagi: <STRONG>Mit Verlaub und als nichtmoderator, dat hab ich jetzt nicht verstanden. :confused: Hoagi</STRONG> Zitieren
haka Geschrieben 18. September 2001 Geschrieben 18. September 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Ueber die Dauerhaftigkeit laesst sich keine Aussage treffen ausser der, dass sie nichts verwenden kann, was zum Zeitpunkt des Aufrufs nicht mit Sicherheit speicherresident ist. Zitieren
haddock Geschrieben 18. September 2001 Geschrieben 18. September 2001 Genauigkeit in den Definitionen hin oder her - der einzige Austausch einer Funktion mit dem "Rest der Welt" sollte doch lieber ausschließlich über Prameterübergabe/Rückgabewert stattfinden, sonst ist das angestrebte Prinzip der Modularisierung für die Füße, und wir können gleich wieder GOTO schreiben. Man sollte in Funktionen definitiv keine Annahmen machen, was außerhalb existiert, mit Ausnahme von Dingen die man per header sicher einbinden kann, wie stdout/stdin etwa. Sobald der gäußerte Wunsch aufkommt, sollte man das Programmdesign sehr kritisch in Frage stellen. Der Käptn Zitieren
haka Geschrieben 18. September 2001 Geschrieben 18. September 2001 Also mein Beitrag war nicht dazu gedacht zum wilden Gebrauch von globalen Variablen aufzurufen oder etwa back to the (C64)BASIC's. Ich meine nur wenn hier ein Kommentar mit <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Mit Verlaub und als Moderator: Zitieren
gajUli Geschrieben 18. September 2001 Geschrieben 18. September 2001 @captain haddock Was Du ueber die Modularisierung von Funktionen und Globals schreibst, ist ganz richtig. Andererseits gibt es Faelle, in den es guenstig ist, wenn eine Funktion so etwas wie ein Gedaechtnis besitzt. Mit static-Variablen kann man dies erzielen, ohne dass eine Funktion das Modularisierungsprinzip verletzt. Eine static-Variable wird beim ersten Aufruf der Funktion definiert (und nur dann), und sie bleibt nach Verlassen der Funktion im Speicher, um beim naechsten Aufruf mit dem letzten Wert fortfahren zu koennen. @hada Hoppla, Du veruninterpretierst meinen Text und forderst mehr Genauigkeit? Dann will ich Dich jetzt mal mit eben dieser Elle messen. Mit static-Variablen magst Du Dich wohl auskennen, mit Lesen, Schreiben und Verstehen von Texten weniger. Dass Du in einem zweiten Posting nochmal nachlegst, bekraeftigt den Verdacht, es ginge Dir nicht um die Sache, sondern um Selbstdarstellung. Mach das in Zukunft gefaelligst nicht auf anderer Leute Kosten. Als erstes hattest Du diesen Satz herbeigezogen: "Ueber die Dauerhaftigkeit laesst sich keine Aussage treffen ausser der, dass sie nichts verwenden kann, was zum Zeitpunkt des Aufrufs nicht mit Sicherheit speicherresident ist." Dabei hattest Du ueberlesen, dass sich der ganze Abschnitt lediglich auf grundsaetzliche Zusammenhaenge bezog. Dein Urteil darueber war: "... so falsch er nur sein kann." Deine Begruendung: "Natürlich ist die Gültigkeit von Variablen , gerade bei C ,in den Regeln der Sprache geregelt." (Ignoranz des Unterschieds zwischen "Dauerhaftigkeit" und "Gueltigkeit") Anschliessend stufst Du den Satz als "Tautologie" ein. (Eine Tautologie ist niemals falsch; Du hattest aber behauptet, der Satz waere "so falsch wie er nur sein kann", dz, dz...). Dann dieses Eigentor: "Jede deklarierte Variable ist in ihrem Gültigkeitsbereich mit Sicherheit Speicherresident." (Eine DEKLARIERTE Variable ist in C nicht speicherresident, weil Speicher erst bei der DEFINITION allokiert wird). Es folgt: "Jede andere Variable mit Sicherheit nicht." (Bei einer nicht deklarierten Variablen eruebrigt sich die Beurteilung ihrer Dauerhaftigkeit bzw. Gueltigkeit, weil sie ein nichtexistentes Objekt waere). Auch nicht schlecht ist: "Gültigkeitsbereiche haben 2 Aspekte Scope( Sichtbarkeit ) und Lifetime ( Lebenszeit )." (Das ist zunaechst mal nicht nur wahr, sondern an sich sogar eine sinnvolle Differenzierung, naemlich in einen raeumlichen und in einen zeitlichen Aspekt. Nun ging es aber um den Begriff "Dauerhaftigkeit", welcher zwar sehr schwammig aber doch immerhin insofern genuegend abgegrenzt ist, als dass ihm nach allgemeinem Sprachgebrauch ueberhaupt keine raeumliche Bedeutung zukommt.) Unter die Kategorie Stilblueten faellt z. B.: "Verläßt eine Variable seinen Scope ist sie mit normalen Sprachmitteln nicht mehr zugreifbar." (Variablen wandern nicht, sondern der Kontrollfluss; das Wort "Variable" hat uebrigens den Sexus "weiblich".) Oder: "Verliert eine Variable seinen Lifetime verliert der darin liegende Wert seine Gültigkeit." (Nun ja, wir waren eigentlich bei "Dauerhaftigkeit von Variablen", woraus bei Dir ploetzlich "Gueltigkeit von Werten" wird. Davon abgesehen ist der Satz unwahr, denn der Wert einer nicht mehr gueltigen Variablen kann laengst woanders gespeichert worden sein.) Und schliesslich dieser herrliche Satz, in dem das Subjekt fehlt: "Mit dem Keyword static deklariert verliert beim Verlassen der Funktion seinen Scope aber nicht seine Lifetime." (Sicher eine von den oben erwaehnten wandernden Variablen, oops, wo isse denn...) *** Zusammengefassend: Ist nicht so sehr viel uebriggeblieben von Deinen Einwaenden, hm? Wir koennen gern en detail ueber static und andere Aspekte des Verhaltens von Namen diskutieren. Aber so eine exzessiv rechthaberische, aggressive und handwerklich schlechte Mod-Schelte, wie Du sie praktizieren wolltest, lass ich mir nicht bieten. Das naechste mal konzentrier Dich besser auf den Text, den Du verreissen willst und zieh Dich weniger dran hoch, wenn ein Mod darauf hinweist, wenn eine Frage praeziser gestellt werden sollte. Uli Zitieren
haka Geschrieben 19. September 2001 Geschrieben 19. September 2001 Wie sagte der schwarze Ritter in "Ritter von der Kokusnuss" nachdem ihm im Kampf Arme und Beine abgeschlagen worden sind: "OK. Sagen wir unentschieden." HAKA Zitieren
haddock Geschrieben 19. September 2001 Geschrieben 19. September 2001 @EisenUli: <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR> Was Du ueber die Modularisierung von Funktionen und Globals schreibst, ist ganz richtig. Andererseits gibt es Faelle, in den es guenstig ist, wenn eine Funktion so etwas wie ein Gedaechtnis besitzt. Zitieren
gajUli Geschrieben 19. September 2001 Geschrieben 19. September 2001 @captain haddock Nichts hinzuzufuegen. Ich bin voellig Deiner Ansicht. Sollte da ein Missverstaendnis gewesen sein (ich verstehe nicht welches), bitte einfach unter "uebliche Missverstaendnisse" einsortieren. @hada *lol* Uli Zitieren
haddock Geschrieben 19. September 2001 Geschrieben 19. September 2001 @EisenUli: *räusper* - hada nennt sich eigentlich haka... Der Käptn Zitieren
gajUli Geschrieben 19. September 2001 Geschrieben 19. September 2001 <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Zitat:</font><HR>Original erstellt von captain haddock: <STRONG> *räusper* - hada nennt sich eigentlich haka... </STRONG> Zitieren
haddock Geschrieben 25. September 2001 Geschrieben 25. September 2001 Und wieder einer dieser threads, die im Sande verlaufen, wo am Ende niemand mehr weiß, worum es ursprünglich mal ging... Der Käptn <FONT COLOR="#a62a2a" SIZE="1">[ 25. September 2001 16:43: Beitrag 1 mal editiert, zuletzt von captain haddock ]</font> Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.