Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Wieder was gelernt?

3 views
Skip to first unread message

Stephan Aspridis

unread,
Dec 17, 2003, 2:26:17 PM12/17/03
to
Hi,

das habe ich heute (nach einigen Stunden Kopfschmerzen) in mein
"Notizbuch für C-Anfänger" geschrieben. Kann man das in etwa so
stehenlassen?

"Jede noch so kleine Routine hat jetzt ihre eigenen lokalen temporären
Variablen für Berechnungen. Globale Platzhaltervariablen zu benutzen ist
eine _sehr_ schlechte Idee. Der Speicher wird wohl unter Umständen nicht
richtig wieder freigegeben und es wird dann munter in Speicherbereiche
geschrieben, die eigentlich nicht zur Verfügung stehen. Im _günstigsten_
Fall gibt das komische Werte. Im schlimmsten Fall (so wie heute einige
Stunden lang bevor ich darauf kam) schmiert das Programm mit einer
kryptischen Fehlermeldung ab."

Gruß,
Stephan

Falk Hueffner

unread,
Dec 17, 2003, 2:36:59 PM12/17/03
to
Stephan Aspridis <s.asp...@t-online.de> writes:

> "Jede noch so kleine Routine hat jetzt ihre eigenen lokalen
> temporären Variablen für Berechnungen. Globale Platzhaltervariablen
> zu benutzen ist eine _sehr_ schlechte Idee. Der Speicher wird wohl
> unter Umständen nicht richtig wieder freigegeben und es wird dann
> munter in Speicherbereiche geschrieben, die eigentlich nicht zur
> Verfügung stehen.

Verstehe ich ueberhaupt nicht. Was sind globale Platzhaltervariablen?
Welcher Speicher wird nicht freigegeben?

--
Falk

Stephan Aspridis

unread,
Dec 17, 2003, 2:55:34 PM12/17/03
to

Ich hatte aus lauter Faulheit ein paar globale Variablen vom Typ double
angelegt und die in jeder Funktion als temporäre Variablen für
Berechnungen benutzt. Hat nicht sehr gut funktioniert...

Gruß,
Stephan

Falk Hueffner

unread,
Dec 17, 2003, 2:58:19 PM12/17/03
to
Stephan Aspridis <s.asp...@t-online.de> writes:

Speicher fuer globale Variablen wird nie freigegeben. Was auch immer
dein Problem war, das war's nicht. Vielleicht haben zwei sich
gegenseitig aufrufende Funktionen die gleiche Variable zu
unterschiedlichen Zwecken genutzt.

--
Falk

Wolfgang Kaufmann

unread,
Dec 17, 2003, 2:39:27 PM12/17/03
to
* Thus spoke Stephan Aspridis <s.asp...@t-online.de>:

Hallo,

> "Jede noch so kleine Routine hat jetzt ihre eigenen lokalen temporären
> Variablen für Berechnungen.

Wenn Du eine "kleine Routine" so definierst, dass sie obige Bedingung
erfüllt, dann stimmt das. ;-)

> Globale Platzhaltervariablen zu benutzen ist eine _sehr_ schlechte
> Idee.

Globale Platzhaltervariablen sind was? Meinst Du globale Variablen?

> Der Speicher wird wohl unter Umständen nicht richtig wieder
> freigegeben und es wird dann munter in Speicherbereiche geschrieben,
> die eigentlich nicht zur Verfügung stehen.

Sprichst Du noch von den "globalen Platzhaltervariablen" oder gehts
jetzt um Pointer?

> Im _günstigsten_ Fall gibt das komische Werte. Im schlimmsten Fall (so
> wie heute einige Stunden lang bevor ich darauf kam) schmiert das
> Programm mit einer kryptischen Fehlermeldung ab."

Falsch. Genau umgekehrt. Im ungünstigen Fall gibts komische Werte, im
günstigsten riechst Du anhang der Segfault wo der Braten schwarze
Flecken hat. ;-)

Vielleicht kann ein klärendes Code-Beispiel deinerseits hier ja etwas
zur Aufklärung deiner Begriffsdefinitionen beitragen.


Wolfgang.
--
"Es gibt Dinge, die man bereut, ehe man sie tut. Und man tut sie doch."
-- Christian Friedrich Hebbel

Wolfgang Kaufmann

unread,
Dec 17, 2003, 3:14:44 PM12/17/03
to
* Thus spoke Stephan Aspridis <s.asp...@t-online.de>:

Hallo,

> Ich hatte aus lauter Faulheit ein paar globale Variablen vom Typ double

> angelegt und die in jeder Funktion als temporäre Variablen für
> Berechnungen benutzt. Hat nicht sehr gut funktioniert...

Kann es sein, dass Du die möglichen unterschiedlichen
Bereiche von Scope/Lifetime von Variablen Dich irritieren?

Ein Beispiel:

| #include <stdio.h>
|
| // die globale Variable
| int foobar = 100;
|
| int main(int argc, char **argv)
| {
| printf("foobar: %d\n", foobar);
| {
| int foobar = 200; printf("foobar: %d\n", foobar);
| {
| int foobar = 300; printf("foobar: %d\n", foobar);
| }
| }
| printf("foobar: %d\n",foobar);
| return 0;

Stephan Aspridis

unread,
Dec 17, 2003, 3:35:07 PM12/17/03
to
Wolfgang Kaufmann wrote:


> Globale Platzhaltervariablen sind was? Meinst Du globale Variablen?
>
>

Ja. Das "Platzhalter" ist so zu verstehen, dass ich z.B. immer die
Variable "double temp" für temporäre Berechnungen verwendet habe,
anstatt in jeder Funktion eigene, verschiedene Variablen zu definieren.

>
> Falsch. Genau umgekehrt. Im ungünstigen Fall gibts komische Werte, im
> günstigsten riechst Du anhang der Segfault wo der Braten schwarze
> Flecken hat. ;-)
>

Kann man auch so sehen. Der Compiler nörgelte auf jeden Fall was von
"corrupted stack" und "buffer overflow" - dabei war ich mir eigentlich
sicher... aber wie das mit dem "eigentlich" eben so ist ;-)

Gruß,
Stephan

Andreas Burmester

unread,
Dec 17, 2003, 5:20:51 PM12/17/03
to
Wolfgang Kaufmann <wk-usene...@theparallax.com> writes:
>* Thus spoke Stephan Aspridis <s.asp...@t-online.de>:

>> Globale Platzhaltervariablen zu benutzen ist eine _sehr_ schlechte
>> Idee.

>Globale Platzhaltervariablen sind was? Meinst Du globale Variablen?

"Globale Variablen" sind was? Meinst Du Objekte mit externer Bindung?
Oder interner? Oder solche mit Filescope? Oder statischer Lebensdauer?
Oder solche mit reserviertem Namen? Oder von allem ein bisschen, je
nachdem, was gerad' so passt? Oder solche, die nicht "lokal" sind? Und
"lokale Variablen" sind was? Meinst Du ...

b.

Wolfgang Kaufmann

unread,
Dec 18, 2003, 12:52:55 AM12/18/03
to
* Thus spoke Andreas Burmester <a.bur...@hamburg.de>:

Hallo,

> Wolfgang Kaufmann <wk-usene...@theparallax.com> writes:
>>Globale Platzhaltervariablen sind was? Meinst Du globale Variablen?
>
> "Globale Variablen" sind was?

...vermutlich eher im Basisbegriffswortschatz einer großen Menge von
Menschen mit at least rudimendären Programmierkenntnisse vorhanden,
mutmaßlich. Falls Du den Eindruck hattest, dass Stephan mit einer meiner
Erfahrung nach gerade unter Anfänger nicht immer sehr weit verbreiteten
Definition (wenn auch formal korrekter) mehr geholfen worden wäre, so
tuts mir leid.

Andreas Burmester

unread,
Dec 21, 2003, 10:03:12 AM12/21/03
to
r...@zedat.fu-berlin.de (Stefan Ram) writes:
>Andreas Burmester <a.bur...@hamburg.de> writes:

>>"Globale Variablen" sind was? Meinst Du Objekte mit externer Bindung?

> Bezeichner haben Bindung.

Sicher. Wenn man die aussen vor laesst, die keine Bindung haben.

Nach der selben Logik sind auch alle Autos rot. Oder blau.

Davon ab: Was hat diese bloede Bemerkung mit der Frage zu tun, ob der
OP mit "globalen Variablen" vielleicht solche mit einer besonderen,
naemlich externen Bindung meint?

>> Oder statischer Lebensdauer?

> Objekte haben Lebensdauer.

Ach.

Und was hat diese bloede Bemerkung mit der Frage zu tun, ob der OP mit
"globalen Variablen" vielleicht solche mit einer besonderen, naemlich
statischen Lebensdauer meint?

b.

Andreas Burmester

unread,
Dec 21, 2003, 10:23:17 AM12/21/03
to
Wolfgang Kaufmann <wk-usene...@theparallax.com> writes:
>* Thus spoke Andreas Burmester <a.bur...@hamburg.de>:

>> Wolfgang Kaufmann <wk-usene...@theparallax.com> writes:


>>>Globale Platzhaltervariablen sind was? Meinst Du globale Variablen?
>>
>> "Globale Variablen" sind was?

>...vermutlich eher im Basisbegriffswortschatz einer großen Menge von
>Menschen mit at least rudimendären Programmierkenntnisse vorhanden,
>mutmaßlich.

Zaehlst Du Dich zu denen mit den "rudimentaeren Kenntnissen"?

Es dreht sich auch nicht um (nicht vorhandene) "Wortschaetze", sondern
um die Bedeutung von Begriffen. Du darfst auch gerne "Befehle",
"Mengen", "Klassen", "DATA-Bloecke", "IMPORT-Moduln" und "Hollerith-
konstanten" in Deinem "Wortschatz" anhaeufen, zur Beschreibung von C
taugen die genausowenig, wie "Vorverdichter" und "Turbinenrad".

> Falls Du den Eindruck hattest, dass Stephan mit einer meiner
>Erfahrung nach gerade unter Anfänger nicht immer sehr weit verbreiteten
>Definition (wenn auch formal korrekter) mehr geholfen worden wäre, so
>tuts mir leid.

Voelliger Quatsch, in jeder Beziehung, und das genaue Gegenteil ist
richtig: Gerade "Anfaengern" ist ueberhaupt nicht "geholfen", wenn man
ihnen Sachverhalte in einem Vokabular schildert, das aus anderen
Begriffswelten stammt. Weil es in ihnen nur falsche Assoziationen
weckt, die den Zugang zum Thema umso mehr erschweren. Wahrscheinlich
werden sie dadurch auch nie zu einem richtigen Verstaendnis von - hier
- der Sprache C finden, und es aus in einem Zustand des Halbwissens und
der ungefaehren Vorstellungen nicht heraus schaffen.

Zurueck zum Ausgang: Ich hatte Dir eine einfache und verstaendliche
Frage gestellt. Netterweise gleich garniert mit ein paar Antwortmoeg-
lichkeiten. Aus welchem Grund beantwortest Du sie nicht? Stark
bevorzugt bitte belegt mit einem Zitat aus ISO/IEC 9899:1999 oder
frueher. Sollte es am "formal korrekt" hapern, tun's auch Deine eigenen
Worte, dann allerdings untermauert mit ein paar anderen, einschlaegigen
Texten.

Sonst muss man Dich wohl auch zu den (ehemaligen?) "Anfaengern"
zaehlen, denen man das Hirn mit abwegigem Vokabular verkleistert hat.

Danke.

b.

Rainer Weikusat

unread,
Dec 21, 2003, 11:15:56 AM12/21/03
to
Andreas Burmester <a.bur...@hamburg.de> writes:
> Wolfgang Kaufmann <wk-usene...@theparallax.com> writes:
>>* Thus spoke Stephan Aspridis <s.asp...@t-online.de>:
>
>>> Globale Platzhaltervariablen zu benutzen ist eine _sehr_ schlechte
>>> Idee.
>
>>Globale Platzhaltervariablen sind was? Meinst Du globale Variablen?
>
> "Globale Variablen" sind was?

Es sind Variablen, deren scope nicht auf jeweils eine Funktion
beschränkt ist. Gibt es in C in zwei Varianten:

static int v; /* file scope */
extern int v; /* external linkage */

Solange die Umgangsprache dieser GABEL nicht durchgängig Englisch ist,
kann Deine in dem Follow-Up auf Wolfgang gestellte Forderung, die
richtige Terminologie zu benutzen, nicht erfüllt werden, denn es gibt
im Deutschen keine für C spezifische, die mehr Gewicht hätte, als 'ad
hoc'-Konstrukte.

Wolfgang Kaufmann

unread,
Dec 21, 2003, 6:23:37 PM12/21/03
to
* Thus spoke Andreas Burmester <a.bur...@hamburg.de>:

Hallo,

> Wolfgang Kaufmann <wk-usene...@theparallax.com> writes:
[Errektionsprobleme von Andreas durch den - wie bereits eingeräumt -
unvorsichtigerweise von mir in den Raum geworfenen Term 'globale Variable']


>>...vermutlich eher im Basisbegriffswortschatz einer großen Menge von
>>Menschen mit at least rudimendären Programmierkenntnisse vorhanden,
>>mutmaßlich.
>
> Zaehlst Du Dich zu denen mit den "rudimentaeren Kenntnissen"?

Kannst Du lesen? Wäre ganz allgemein für eine Kommunikation nicht
unvorteilhaft.

> Voelliger Quatsch, in jeder Beziehung, und das genaue Gegenteil ist
> richtig: Gerade "Anfaengern" ist ueberhaupt nicht "geholfen", wenn man
> ihnen Sachverhalte in einem Vokabular schildert, das aus anderen
> Begriffswelten stammt.

Hättest Du den Kern erkannt, wäre dies wohl der erste nicht vollkommen
schwachsinnige Absatz von Dir der mir in Erinnerung bleiben wird. Tja,
wirklich schade drum.

> Weil es in ihnen nur falsche Assoziationen weckt, die den Zugang zum
> Thema umso mehr erschweren. Wahrscheinlich werden sie dadurch auch nie
> zu einem richtigen Verstaendnis von - hier - der Sprache C finden, und
> es aus in einem Zustand des Halbwissens und der ungefaehren
> Vorstellungen nicht heraus schaffen.

Wohl wahr.

> Zurueck zum Ausgang: Ich hatte Dir eine einfache und verstaendliche
> Frage gestellt.

Zurück zum Hier: Deine Fragen (und ob Du Antworten richtig verstehst)
interessieren mich genauso wenig wie Du. Wenn Du jemanden suchst, den
deine Fragen interessieren, versuche es doch einfach mal Freitag abends
bei dem Herrn der für seine Sitzungen mit Dir Geld bekommt.

> Sonst muss man Dich wohl auch zu den (ehemaligen?) "Anfaengern"
> zaehlen, denen man das Hirn mit abwegigem Vokabular verkleistert hat.

Oja, das ist süß. Bevor noch mehr Kleister hier ankommt, dann doch
lieber gleich rein mit Dir ins Killfile. *plonk*

[ f'up2 -> poster ]

Wolfgang.
--
"Erfahrungen -- das sind die vernarbten Wunden unserer Dummheit."
-- John Osborne

Andreas Burmester

unread,
Jan 7, 2004, 1:14:28 AM1/7/04
to
Rainer Weikusat <weik...@students.uni-mainz.de> writes:
>Andreas Burmester <a.bur...@hamburg.de> writes:
>> Wolfgang Kaufmann <wk-usene...@theparallax.com> writes:

>>>> Globale Platzhaltervariablen zu benutzen ist eine _sehr_ schlechte
>>>> Idee.
>>
>>>Globale Platzhaltervariablen sind was? Meinst Du globale Variablen?
>>
>> "Globale Variablen" sind was?

>Es sind Variablen, deren scope nicht auf jeweils eine Funktion
>beschränkt ist. Gibt es in C in zwei Varianten:

> static int v; /* file scope */
> extern int v; /* external linkage */

Das "ist" nicht so, sondern hast Du Dir gerade ausgedacht. Oder Dich
entschlossen, diese Erklaerung zu uebernehmen, weil sie gerade
plausibel erscheint. Ich habe in dclc mehrmals andere, widersprechende
angefuehrt. Richtig ist: Jeder macht sich einen eigenen Reim 'drauf,
und - schlimmer - viele benutzen sie in verschiedenen Kontexten
verschieden, oder meinen - noch schlimmer - etwas Nebuloeses, und
koennen sich auf Nachfrage nicht erklaeren. Beispiel haben wir gerade
live miterlebt.

Uebrigens finde ich, dass mit "Scope nicht auf eine Funktion
beschraenkt" ganz eindeutig absolute Bezeichner beschrieben sind. Oder
totale. Die bekanntlich eine Untermenge der interstellaren darstellen.

Uebrigens #2, und das ist ernsthaft (und recht peinlich fuer jemanden,
der gerade etwas "definieren" will): Du hast Dich mit beiden Kommen-
taren oben boes' vertan; selbst wenn das Deklarationen auf File-Level
sein sollen (was Du dann vergessen haettest zu erwaehnen) - ein
`extern' hat nichts, ach was, *ueberhaupt nichts* mit "external
linkage" zu tun. Man kann der 2. Deklaration nicht ansehen, wie das `v'
gebunden ist. Kann genauso gut intern sein. Nimm Deine beiden Zeilen
mit dem selben Bezeichner als so in einer TU stehend an - sie wuerden
kein Fehler sein.

Offenbart sich Dir auch gerade ein Serioesitaetsproblem?

>Solange die Umgangsprache dieser GABEL nicht durchgängig Englisch ist,
>kann Deine in dem Follow-Up auf Wolfgang gestellte Forderung, die
>richtige Terminologie zu benutzen, nicht erfüllt werden, denn es gibt
>im Deutschen keine für C spezifische, die mehr Gewicht hätte, als 'ad
>hoc'-Konstrukte.

Welchem meiner gewichtigen "Konstrukte" moechtest Du denn jetzt
beipflichten? "Totale" oder "absolute" oder "interstellare" Variablen?

Im Uebrigen ist es natuerlich falsch, dass es keine eindeutigen
deutsche Beschreibungen gaebe - ich habe schliesslich welche benutzt.
Meistens wird mit "global" ja auch "extern gebunden" gemeint, spricht
sich gut und kuerzer auch als "extern" aus. Deine kann man genauso gut
und kurz "gebunden" nennen. Beides eindeutig. Und ohne Frage
"gewichtiger", weil sie "richtiger", nein, wohl definiert sind.

Die Crux mit dem "global" ist und bleibt, dass es a) woertlich
widersinning und b) (in C) undefiniert ist. X-Mal gesagt worden, und
daran aendert sich auch nichts, wenn Brabbler es allzu gern verwenden.

b.

0 new messages