Re: anfaengerfrage zu pointern
- From: Erich Fruehstueck <ef@xxxxxxxxxxxxxxx>
- Date: Wed, 25 Jan 2006 20:47:07 +0100
"Ingo Menger" <quetzalcotl@xxxxxxxxxxxxxx> wrote:
>
> Erich Fruehstueck schrieb:
>
>> "Ingo Menger" <quetzalcotl@xxxxxxxxxxxxxx> wrote:
>>
>> > Erich Fruehstueck schrieb:
>> >
>> >> Das Problem ist, das "globale Variable" ein sehr schwammiger Begriff ist,
>> >> unter dem man sich viel oder gar nichts vorstellen kann. Demgegenüber
>> >> stehen klar definierte Begriffe des C-Standards.
>> >
>> > Das ist so, aber ein Problem ist es nicht. Daß ein Standarddokument
>> > eine sehr formale Sprache pflegen muß, ist klar. Daß man im Alltag
>> > weiterhin mehr oder weniger schwammige Begriffe verwendet, ebenso.
>> > Ein "Problem" wird das nur, wenn verlangt wird, daß nur noch in der
>> > Standarddokumentsprache geredet werden darf.
>>
>> Ein "Problem" wird es, wenn die Gesprächsteilnehmer jeweils etwas anderes
>> darunter verstehen. Dagegen hilft nur eine Operationalisierung (die bist Du
>> noch schuldig geblieben, ich weiß noch immer nicht, was Du genau mit einer
>> globalen Variablen meinst) oder die Verwendung klar definierter Begriffe.
>
> In C verstehe ich darunter schlicht und einfach "nicht lokal".
> Unter "lokal" verstehe ich: innerhalb eines Blocks definiert (nicht:
> deklariert).
Soweit ich dich richtig verstehe, ist also in dem Code
static int x = 0;
int get_sum (int s);
{
x += s;
return x;
}
die Variable x für Dich global?
Und ich dachte bisher, Du meinst damit nur Variablen mit externer Bendung.
So kann man sich mißverstehen. Sorry, aber das widerspricht meinem Empfinden
für "global".
>> > Oder, noch schlimmer, man muß, wie in
>> > C, etwas schreiben, damit sie nicht global, sondern nur file-global
>> > werden.
>>
>> Wie ist das mit einer in der Mitte einer Datei deklarierten Variable,
>> ist die dann semi-file-global?
>
> Wieso? Nur weil "file-global" ein blöder Ausdruck ist, muß man nicht
> noch blödere kreieren. Ich weiß, habe es oben selber verwendet.
> Was ist an der Einschränkung, daß ein Bezeichner erst deklariert oder
> definiert werden muß, und dann erst verwendet werden kann schwer zu
> verstehen?
Darum geht es nicht.
> Möchtest Du behaupten, daß die Variable, auf die stdout verweist,
> nicht global ist, weil Du sie nicht vor
>
> #include <stdio.h>
>
> verwenden kannst?
stdout ist keine Variable, sondern ein Makro. Hier drei Varianten
von Implementationen aus der realen Welt:
(1)
extern struct _IO_FILE *stdout;
#define stdout stdout
(2)
#define stdout (&_iob[1])
(3)
#define stdout __getstdhndl(1)
>> >> Das ist auch gut so, denn die Verwendung solcher Variablen ist böse,
>> >> weil damit die Schnittstellen unübersichtlich werden.
>> >
>> > Eben drum finde ich es *irreführend* zu behaupten, in C gäbe es sowas
>> > nicht. Das kann zumindest Anfänger in einer völlig falschen
>> > Sicherheit wiegen. Wieviel kann man falsch machen, wenn man im file
>> > scope nicht "static" schreibt!
>>
>> Aber gerade dieser Unterschied läßt sich in deiner Terminologie nicht
>> mehr erklären, schließlich verwendest Du für beides global.
>
> Mitnichten. Es gibt in C die Gefahren nichtlokaler Variablen, die es
> auch in allen anderen Sprachen gibt. Darüber hinaus gibt es noch
> spezielle Gefahren, die auftreten, wenn ich nicht "static" verwende.
Mit deiner Begrifflichkeit schmeist Du dann die durchaus unterschiedlichen
Gefahren in einen Topf. Das halte ich nicht für gut.
>> Was stört Dich an der Verwendung des Begriffs "externe Bindung"? Dieser
>> ist im Unterschied zu "globale Variable" wohldefiniert, gilt für alle
>> kompilierten Sprachen und vermeidet Missverständnisse.
>
> Es stört mich nicht, außer daß er nicht alle Szenarien für globale
> Variablen umfaßt. (Ein riesengroßes Sourcefile, an dessen Anfang
> lauter static definiert sind ...) Und, wie gerade hier im anderen
> Thread wieder deutlich wird, kommen Leute von anderen Sprachen wie Java
> (das BTW kompiliert wird und keine "externe Bindung" kennt, IMHO) und
> verwenden Begriffe für sprachübergreifende Konzepte in ihren Fragen.
> Sie haben es ohnehin schon schwer durchzublicken. Man muß nicht alles
> verkomplizieren, indem man erst einmal die Spezialsprache des
> Standarddokuments lehrt.
Du wirst mit dieser Definition von "globalen Variablen" nur Mißverständnisse
ernten. Nie und nimmer wäre ich auf die Idee gekommen, Variablen mit
interner Bindung darunter zu verstehen.
Erich
--
The next version of EFEU is comming soon.
Get the open source from http://efeu.cybertec.at.
.
- Follow-Ups:
- Re: anfaengerfrage zu pointern
- From: Ingo Menger
- Re: anfaengerfrage zu pointern
- References:
- anfaengerfrage zu pointern
- From: Andreas Leppert
- Re: anfaengerfrage zu pointern
- From: Andreas Burmester
- Re: anfaengerfrage zu pointern
- From: Andreas Leppert
- Re: anfaengerfrage zu pointern
- From: Claudio Carobolante
- Re: anfaengerfrage zu pointern
- From: Claus Reibenstein
- Re: anfaengerfrage zu pointern
- From: Claudio Carobolante
- Re: anfaengerfrage zu pointern
- From: R.Freitag
- Re: anfaengerfrage zu pointern
- From: Andreas Burmester
- Re: anfaengerfrage zu pointern
- From: Ingo Menger
- Re: anfaengerfrage zu pointern
- From: Rainer Weikusat
- Re: anfaengerfrage zu pointern
- From: Ingo Menger
- Re: anfaengerfrage zu pointern
- From: Ingo Menger
- Re: anfaengerfrage zu pointern
- From: Erich Fruehstueck
- Re: anfaengerfrage zu pointern
- From: Ingo Menger
- Re: anfaengerfrage zu pointern
- From: Erich Fruehstueck
- Re: anfaengerfrage zu pointern
- From: Ingo Menger
- anfaengerfrage zu pointern
- Prev by Date: Re: anfaengerfrage zu pointern
- Next by Date: Re: anfaengerfrage zu pointern
- Previous by thread: Re: anfaengerfrage zu pointern
- Next by thread: Re: anfaengerfrage zu pointern
- Index(es):
Relevant Pages
|