Re: anfaengerfrage zu pointern



"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.

.



Relevant Pages