Zum Inhalt springen

Funktionen


totto141083

Empfohlene Beiträge

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>

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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:

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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...). :D

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). :D

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".) :D

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...) :D

***

Zusammengefassend: Ist nicht so sehr viel uebriggeblieben von Deinen Einwaenden, hm? :D

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...