Blindfisch schrieb:> Warum schmeißt der Compiler bei folgendem Programm die Meldungexpected> expression before '{' token"in den Zeilen mit der Array-Zuweisung?
weil man Array nichts zuweisen kann. Egal on 1 oder mehr dimensional.
Man kann sie nur initalisieren.
Sebastian V. O. schrieb:> Arrays kann man nur bei der Deklaration auf diese Weise Werte zuweisen.> So ginge es z.B.:char field[2][3] = {{'0', '1', '2'}, {'a', 'b', 'c'}};
Das ist aber schon die Definition (und auch Deklaration), da da schon
Speicher verbraucht wird.
Eine reine Deklartion bei Variablen wird in C mit extern gemacht
1
extrencharfield[2][3];
Bekanntgabe, dass (irgendwo) eine Variable field existiert.
Bei Funktionen wäre das der Prottyp.
Peter II schrieb:> weil man Array nichts zuweisen kann. Egal on 1 oder mehr dimensional.
Warum muss man eigentlich immer gleich vorlaut die Klappe aufreißen,
noch dazu wenn's falsch ist!
http://de.wikibooks.org/wiki/C-Programmierung:_Arrays
" .. Bei einer Initialisierung steht ein Zuweisungsoperator nach dem
deklariertem Array, .. "
BD244C schrieb im Beitrag #3999294:
> Warum muss man eigentlich immer gleich vorlaut die Klappe aufreißen,> noch dazu wenn's falsch ist!>> http://de.wikibooks.org/wiki/C-Programmierung:_Arrays>> " .. Bei einer Initialisierung steht ein Zuweisungsoperator nach dem> deklariertem Array, .. "
was war jetzt daran falsch?
Nur weil es einen Zuweisungsoperator gibt, ist es noch lange keine
Zuweisung.
Peter II schrieb:> was war jetzt daran falsch?
Das fragst du ernsthaft noch?
> Nur weil es einen Zuweisungsoperator gibt, ist es noch lange keine> Zuweisung.
Doch! Genau das IST es! Eine Zuweisung.
Nur weil du es nicht verstehst, heißt das nicht, das Wikibooks hier
falsch liegt.
BD244C schrieb im Beitrag #3999337:
> Peter II schrieb:>> was war jetzt daran falsch?>> Das fragst du ernsthaft noch?>>> Nur weil es einen Zuweisungsoperator gibt, ist es noch lange keine>> Zuweisung.>> Doch! Genau das IST es! Eine Zuweisung.
Ist es nicht.
Wikipedia liegt hier falsch. Das = ist an dieser Stelle kein
Zuweisungsoperator.
Initialisierung ist nicht dasselbe wie Zuweisung. In C ist dieser
Unterschied noch nicht so bedeutsam, aber in C++ ist der Unterschied
essentiell um zu verstehen, wann ein operator= aufgerufen wird und wann
ein Konstruktor aufgerufen wird.
BD244C schrieb im Beitrag #3999337:
> Peter II schrieb:>> was war jetzt daran falsch?>> Das fragst du ernsthaft noch?
ja, ich will es ja schon wissen was falsch war.
>> Nur weil es einen Zuweisungsoperator gibt, ist es noch lange keine>> Zuweisung.> Doch! Genau das IST es! Eine Zuweisung.
nein, es ist eine Initialisierung die mit hilfe von dem
Zuweisungsoperator gemacht wird.
> Nur weil du es nicht verstehst, heißt das nicht, das Wikibooks hier> falsch liegt.
wo steht das man einem Array ein anders Array zuweisen kann?
Karl Heinz schrieb:>> Doch! Genau das IST es! Eine Zuweisung.>> Ist es nicht.> Wikipedia liegt hier falsch. Das = ist an dieser Stelle kein> Zuweisungsoperator.>> Initialisierung ist nicht dasselbe wie Zuweisung.
Doch ist es, lieber Karl-Heinz Buchegger. Und wir reden hier von C,
nicht von C++ !!
Initial heißt übersetzt einfach ANFÄNGLICH! Eine INITIALISIERUNG ist
hier nichts anderes als eine ZUWEISUNG ZU BEGINN, also anfänglich.
BD244C schrieb im Beitrag #3999354:
> Initial heißt übersetzt einfach ANFÄNGLICH! Eine INITIALISIERUNG ist> hier nichts anderes als eine ZUWEISUNG ZU BEGINN, also anfänglich.
noch mal nein. Initialisierung läuft anders, aber als eine Zuweisung.
Nur weil es für dich das gleiche ist, hast du damit noch lange nicht
recht.
Und weil es etwas anders ist, kann man auch nicht einfach Arrays etwas
zuweisen.
Peter II schrieb:> noch mal nein. Initialisierung läuft anders, aber als eine Zuweisung.
Das ist kein Widerspruch. Eine Initialisierung, also eine Zuweisung ZU
BEGINN, ist nun mal in C anders geregelt als eine Werte-Zuweisung, die
später geschieht. Trotzdem bleibt es immer ein ZUWEISEN von Werten!
Anders geht es ja gar nicht! Ihr versucht mal wieder Begriffe ad
absurdum spitzfindisch auszulegen, ohne euch über den Vorgang dahinter
bewusst zu sein.
BD244C schrieb im Beitrag #3999354:
> Karl Heinz schrieb:>>> Doch! Genau das IST es! Eine Zuweisung.>>>> Ist es nicht.>> Wikipedia liegt hier falsch. Das = ist an dieser Stelle kein>> Zuweisungsoperator.>>>> Initialisierung ist nicht dasselbe wie Zuweisung.>> Doch ist es, lieber Karl-Heinz Buchegger.
Nein, lieber BD244C
Initialisierung ist eben nicht dasselbe.
> Und wir reden hier von C,> nicht von C++ !!
Der Mechanismus und die Unterscheidung zwischen beidem ist in beiden
Sprachen identisch.
> Initial heißt übersetzt einfach ANFÄNGLICH! Eine INITIALISIERUNG ist> hier nichts anderes als eine ZUWEISUNG ZU BEGINN, also anfänglich.
Und wenn du es noch 20 mal wiederholst, du hast nicht recht. Eine
Intialisierung ist ist eine Intialisierung und eine Zuweisung ist eine
Zuweisung. Selbst wenn für beides dasselbe Symbol '=' benutzt wird, sind
das konzeptionell 2 verschiedene Dinge.
Du hast doch auch kein Problem damit, dass ein '*' ja nach Umgebung in
der er auftaucht verschiedene Bedeutungen hat und damit andere Regeln
einhergehen. Warum hast du dann mit einem '=' das Problem? Das ist
nichts anderes.
BD244C schrieb im Beitrag #3999365:
> Das ist kein Widerspruch. Eine Initialisierung, also eine Zuweisung ZU> BEGINN, ist nun mal in C anders geregelt als eine Werte-Zuweisung, die> später geschieht. Trotzdem bleibt es immer ein ZUWEISEN von Werten!
nein. Bei der Initiierung wird das Objekt gleich mit den Richtigen werte
gebaut, bei der Zuweisung wird es erst leer gebaut und dann werden die
Werte zuwiesen.
> Ihr versucht mal wieder Begriffe ad> absurdum spitzfindisch auszulegen, ohne euch über den Vorgang dahinter> bewusst zu sein.
wenn dir mal schaust, wie globale Variabel initialisiert werden, wirst
du merken das dort keine Zuweisung stattfindet.
Lies dazu auch den Satz im Kernighan/Ritchie, "Programmieren in C",
Zweite Ausgabe im Kapitel 4 Funktionen und Programmstruktur bei
Initialisierung, kurz bevor die Initialisierung eines Vektors erklärt
wird (bei mir S. 84)
"Die Initialisierungen von [..] Variablen ist effektiv nur eine
Ablürzung für Zuweisungsanweisungen."
Auf Seite 30 wird auch von "BELEGUNG" von Variablen geschrieben
"Am Beginn einer Funktion müssen automatische Variable jeweils explizit
mit Werten BELEGT werden."
Ob man jetzt von Zuweisung oder Belegung spricht ist Jacke wie Hose.
Inialisierung ist nichts anderes wie eine Wertezuweisung ZU BEGINN (=
INITIAL). Das ist alles.
Ihr macht mal wieder eine Überdehnung an Spitzfindigkeiten dieser
Begriffe, wie sie nie gedacht waren.
Sinnlos euch das zu vermitteln!
BD244C schrieb im Beitrag #3999392:
> Sinnlos euch das zu vermitteln!
schön das so fleißig suchst, aber auch dort steht nichts das es das
gleiche ist.
> "Die Initialisierungen von [..] Variablen ist effektiv nur eine> Ablürzung für Zuweisungsanweisungen."
hier wird doch schon deutlich, das es 2 Verschiedene dinge sind, darum
auch 2 Begriffe. Das sie eventuell zum gleichen Ergebnis kommen ist
egal.
Aber eine Stelle wo steht, das man Array etwas zuweisen kann hast du
nicht gefunden? Merkwürdig.
Peter II schrieb:> Bei der Initiierung wird das Objekt gleich mit den Richtigen werte> gebaut,
In C gibt es keine Objekte!
Es werden Werte ZUGEWIESEN und nicht gebaut! Es gibt in C keinen
"Bauplan" für Variable und auch keine Objekte.
Aber das zeigt mir wie sinnlos es ist mit euch um Begriffe zu feilschen!
Ende und aus.
BD244C schrieb im Beitrag #3999354:
> Initial heißt übersetzt einfach ANFÄNGLICH!
Gut erkannt, aber
> Eine INITIALISIERUNG ist hier nichts anderes als eine ZUWEISUNG ZU> BEGINN, also anfänglich.
diese Schlußfolgerung erschließt sich mir nicht. Weil "initial" soviel
wie "anfänglich" heißt, muß es eine Zuweisung sein?
BD244C schrieb im Beitrag #3999365:
> Eine Initialisierung, also eine Zuweisung ZU BEGINN, ist nun mal in C> anders geregelt als eine Werte-Zuweisung, die später geschieht.
Nein, eine "Zuweisung zu Beginn" gibt es nicht. Entweder bekommt die
Variable gleich bei ihrer Erstellung einen Wert mit, dann wurde sie
initialisiert, oder eine Variable, die bereits exisitert, bekommt einen
neuen Wert, dann wurde dieser ihr zugewiesen.
> Ihr versucht mal wieder Begriffe ad absurdum spitzfindisch auszulegen,> ohne euch über den Vorgang dahinter bewusst zu sein.
Du solltest vielleicht mal in die Definition der Sprache C reinschauen.
Da sind diese Begriffe nämlich eindeutig beschrieben.
Peter II schrieb:>> Ihr versucht mal wieder Begriffe ad>> absurdum spitzfindisch auszulegen, ohne euch über den Vorgang dahinter>> bewusst zu sein.> wenn dir mal schaust, wie globale Variabel initialisiert werden, wirst> du merken das dort keine Zuweisung stattfindet.
Schon alleine auch deshalb, weil C Zuweisungen außerhalb von Funktionen
verbietet.
BD244C schrieb im Beitrag #3999399:
> Peter II schrieb:>> Bei der Initiierung wird das Objekt gleich mit den Richtigen werte>> gebaut,>> In C gibt es keine Objekte!
Auch dazu solltest du mal die C-Norm lesen. Dort ist der Begriff
"object" genau definiert. Objekte sind im Prinzip alles, was Daten ist.
Eine Variable ist ein Objekt, das einen Namen hat. Es gibt aber auch
Objekte ohne Namen, wie z.B. das, in dem der Return-Wert einer Funktion
zurückgegeben wird oder der Speicherblock, auf den ein malloc-Aufruf
einen Zeiger zurückgibt.
Hier findet man ein Zitat aus der ISO-Norm:
http://de.wikipedia.org/wiki/Objekt_(Programmierung)#Pragmatische_Definition_in_C
Rolf Magnus schrieb:> Auch dazu solltest du mal die C-Norm lesen. Dort ist der Begriff> "object" genau definiert. Objekte sind im Prinzip alles, was Daten ist.
Richtig, Objekt ist in C ein Speicherbereich. Aber genau da liegt der
Hase im Pfeffer. Es gibt schon genug Verwirrung durch Überschneidungen
zwischen C und C++, so dass der Begriff "Objekt" sprachlich hier C++
vorbehalten sein sollte. Die meisten werden nun mal "Objekt" mit OOP in
Zusammenhang bringen und dort sollte es auch hingehören bzw. bleiben,
gerade auch wenn der Begriff "Bauplan" (wie geschehen) dabei fällt.
Rolf Magnus schrieb:> diese Schlußfolgerung erschließt sich mir nicht. Weil "initial" soviel> wie "anfänglich" heißt, muß es eine Zuweisung sein?
Es heißt nicht "soviel wie anfänglich", es HEISST anfänglich und nichts
anderes. Initialisierung ist einfach ein spezieller Akt einer Zuweisung
von Werten an Variable. Das ist alles. Wie das im einzelnen geschieht,
etwa bei Arrays oder einfachen Variablen, ist geregelt. Punkt und aus.
Wann immer Variable mit Werten belegt werden, findet eine Zuweisung
dieser Werte an einen Platzhalter statt. Daraus braucht man keine
Wissenschaft oder Talibanisierung der Begriffe machen. Der gesunde
Menschenverstand reicht, um das zu verstehen. Wenn man im C&R dazu liest
merkt man das auch.
BD244C schrieb im Beitrag #3999392:
> Lies dazu auch den Satz im Kernighan/Ritchie, "Programmieren in C",> Zweite Ausgabe im Kapitel 4 Funktionen und Programmstruktur bei> Initialisierung, kurz bevor die Initialisierung eines Vektors erklärt> wird (bei mir S. 84)>> "Die Initialisierungen von [..] Variablen ist effektiv nur eine> Ablürzung für Zuweisungsanweisungen."
'ist effektiv' ist nicht dasselbe wie 'es ist'
Der C Standard unterscheidet zwischen den beiden.
Du scheinst eine Zuweisung einzig und alleine daran festzumachen, dass
im Speicher Werte abgelegt werden.
Dem ist aber nicht so.
Mit dem Begriff 'Zuweisungsoperator' ist in der Sprachdefinition eine
ganze Latte von Regeln verknüpft. Unter anderem auch eine Voraussetzung:
Damit ein Zuweisungsoperator anwendbar ist, muss die linke Seite eine
'modifiable lvalue' sein.
Genau diese nicht erfüllte Voraussetzung ist es, die bei
1
constinti;
2
3
i=5;
beim Versuch das = als Zuweisungsoperator anzuwenden, einen Fehler
provoziert. i ist zwar ein lvalue. Aber er ist nicht modifiable.
Das '=' in
1
intj=8;
ist syntaktisch kein Zuweisungsoperator sondern ganz klar in der
Syntaxdefintion einfach nur als Zeichen '=' vorgesehen, welches anzeigt,
dass eine Initialisierung folgt.
Das ist genau das gleiche, wie in
1
foo(2,3,4);
das Komma an dieser Stelle kein Kommaoperator ist, sondern einfach nur
ein Komma, welches Argumente voneinander trennt.
BD244C schrieb im Beitrag #3999450:
> Rolf Magnus schrieb:>> Auch dazu solltest du mal die C-Norm lesen. Dort ist der Begriff>> "object" genau definiert. Objekte sind im Prinzip alles, was Daten ist.>> Richtig, Objekt ist in C ein Speicherbereich. Aber genau da liegt der> Hase im Pfeffer. Es gibt schon genug Verwirrung durch Überschneidungen> zwischen C und C++, so dass der Begriff "Objekt" sprachlich hier C++> vorbehalten sein sollte. Die meisten werden nun mal "Objekt" mit OOP in> Zusammenhang bringen und dort sollte es auch hingehören bzw. bleiben,> gerade auch wenn der Begriff "Bauplan" (wie geschehen) dabei fällt.>> Rolf Magnus schrieb:>> diese Schlußfolgerung erschließt sich mir nicht. Weil "initial" soviel>> wie "anfänglich" heißt, muß es eine Zuweisung sein?>> Es heißt nicht "soviel wie anfänglich", es HEISST anfänglich und nichts> anderes. Initialisierung ist einfach ein spezieller Akt einer Zuweisung> von Werten an Variable. Das ist alles. Wie das im einzelnen geschieht,> etwa bei Arrays oder einfachen Variablen, ist geregelt. Punkt und aus.> Wann immer Variable mit Werten belegt werden, findet eine Zuweisung> dieser Werte an einen Platzhalter statt. Daraus braucht man keine> Wissenschaft oder Talibanisierung der Begriffe machen. Der gesunde> Menschenverstand reicht, um das zu verstehen. Wenn man im C&R dazu liest> merkt man das auch.
[ ] Ich weiß alles und alle anderen sind doof.
Da darfst du jetzt ein Kreuzchen reinmachen lieber BD244C (Gast)!
> Wenn man im C&R dazu liest merkt man das auch.
Der C&R definiert schon lange nicht mehr, wie C funktioniert oder wie es
definiert wurde. Das tut der C-Standard.
Und der C-Standard gibt dir nicht recht.
Sorry.
Aber es reicht nicht, hemdsärmelig damit zu argumentieren, welche
Auswirkungen bestimmte Zeichen in einer Programmiersprache haben. Zu den
Begriffen wie zum Beispiel "Zuweisungsoperator" gibt es Regeln und
Regelungen, wann und wo etwas ein Zuweisungsoperator ist und wann nicht.
Edit:
> Der gesunde Menschenverstand reicht, um das zu verstehen.
Und nochmal sorry. In einer formalen Sprachdefinition hat 'der gesunde
Menschenverstand' nichts zu suchen. Dort müssen die Dinge genau
definiert werden. Das ist nicht immer einfach und manchmal sind die
Regeln scheinbar unnötig komplex formuliert (und ja: manchmal sind sie
auch schlecht formuliert) aber eines findet sich in einem Regelwerk ganz
sicher nicht: die Definition 'xyz funktioniert so, wie man sich das mit
gesundem Menschenverstand vorstellt"
Karl Heinz schrieb:> Mit dem Begriff 'Zuweisungsoperator' ist in der Sprachdefinition eine> ganze Latte von Regeln verknüpft.
Da gebe ich dir sogar gerne recht. Den Begriff würde ich hier auch nicht
so verwenden, weil man an einen Operator schon ein sehr spezielles
Regelwerk binden kann. Ich habe dennoch die Seite von Wikibooks hier als
schnelles Beispiel aufgeführt, um zu verdeutlichen, dass der Begriff
"zuweisen" eher ein sehr allgemeiner Begriff ist, den man nicht streng
auslegen kann oder sollte (ähnlich wie den Begriff "belegen").
Sei es drum. Lassen wir es stehen wie es ist. Wir werden uns hier nicht
einigen.
Karl Heinz schrieb:> Der C&R definiert schon lange nicht mehr, wie C funktioniert
Du meinst Kernighan/Ritchie, "Programmieren in C", Zweite Ausgabe ist
überholt???
Seit wann gibt es denn eine dritte Ausgabe? Habe ich da was verpasst?
BD244C schrieb im Beitrag #3999467:
> "zuweisen" eher ein sehr allgemeiner Begriff ist, den man nicht streng> auslegen kann oder sollte (ähnlich wie den Begriff "belegen").
Der Begriff ist dort aber nicht gefallen. Dort ist der Begriff
'Zuweisungsoperator' gefallen (zumindest nach deinem Zitat, ich habs
nicht kontrolliert).
Und das ist nicht korrekt. Das hier ist kein Zuweisungsoperator. Selbst
wenn der Effekt darin besteht, dass bestimmte Speicherstellen einen Wert
bekommen.
>> Sei es drum. Lassen wir es stehen wie es ist. Wir werden uns hier nicht> einigen.
Ja. Weil du hemdsärmelig argumentierst anstatt dir im C Standard
anzusehen, wie die Dinge tatsächlich definiert sind.
das hier ist eine Initialisierung. Das = ist der Anzeiger für die
Intialisierung
1
intj=i=9;
Dieses =
1
intj=i=9;
2
^
3
|
4
dashier
ist wieder der Anzeiger für eine Intialisierung. Die entsprechenden
Regeln für Initialisierungen gelten.
Dieses = hier
1
intj=i=9;
2
^
3
|
4
dashier
ist ein Zuweisungsoperator. Die entsprechenden Regeln für den
Zuweisungsoperator gelten.
verblüfft, das man das zweite Beispiel überhaupt schreiben kann?
Nun, das braucht niemanden zu verblüffen.
Etwas vereinfacht ausgedrückt, besagt die Syntax, dass eine
Initialisierung eine Assignment-Expression sein kann. Wieder vereinfacht
ausgedrückt ist eine Assignment Expression der rechte Teil einer
Zuweisung. Die wiederrum von der Form
BD244C schrieb im Beitrag #3999468:
> Karl Heinz schrieb:>> Der C&R definiert schon lange nicht mehr, wie C funktioniert>> Du meinst Kernighan/Ritchie, "Programmieren in C", Zweite Ausgabe ist> überholt???>> Seit wann gibt es denn eine dritte Ausgabe? Habe ich da was verpasst?
Die zweite Ausgabe beschreibt ANSI-C. Auch als C89 bekannt.
Danach gab es noch einige neuere C-Standards von der ISO. Die
bekanntesten sind C99 und C11.
Jeder neuere Standard setzt den vorhergehenden ausser Kraft (habe ich
auch gerde gelernt).
Betrachte den K&R als Einführung in die Konzepte der Sprache.
Und die deutsche Übersetzung solltest du nicht unbedingt als Referenz
nehmen.
Karl Heinz schrieb:>> Der gesunde Menschenverstand reicht, um das zu verstehen.> Und nochmal sorry. In einer formalen Sprachdefinition hat 'der gesunde> Menschenverstand' nichts zu suchen.
Das sehe ich ganz anders. Für mich gibt es hier keinen Widerspruch. Wir
reden hier über Begriffe, die es auszulegen gilt und nicht über streng
mathematische Definitionen. Den Unterschied, lieber Karl-Heinz, solltest
du eigentlich verstehen. So 100 prozentig festgelegt wie du hier meinst
sind einige Begriffe in der Programmiererei gar nicht. Dazu gehört auch
der Begriff zuweisen. Und der Begriff Objekt beispielsweise auch. Wie
willst du sonst den Leuten erklären, dass es einerseits um einen
beliebigen Speicherbereich geht (C) und andererseits um ein "Exemplar
eines bestimmten Datentyps oder einer bestimmten Klasse".
http://de.wikipedia.org/wiki/Objekt_%28Programmierung%29
Die Bedeutung der Begriffe hängt also immer von Kontext ab, in dem sie
zur Anwendung kommen.
@ BD244C
Ich vermute ich kann ein wenig nachvollziehen, was in Dir vorgeht. Es
ist allerdings nicht ganz angenehm mit Dir auf die bisherige Weise über
das Thema zu reden.
Lass doch das Thema mal einige Zeit ruhen. Wenn es Dir dann noch wichtig
ist, dann kannst Du es ja nochmal aufgreifen.
Dirk B. schrieb:> Betrachte den K&R als Einführung in die Konzepte der Sprache.> Und die deutsche Übersetzung solltest du nicht unbedingt als Referenz> nehmen.
Die deutsche Übersetzung ist recht gut gelungen. Darüber braucht hier
keiner als Oberschlaumeier den Stab zu brechen und dass es Neuerungen
wie C99, C11 gibt tut hier nichts zur Sache.
BD244C schrieb im Beitrag #3999496:
> Karl Heinz schrieb:>>> Der gesunde Menschenverstand reicht, um das zu verstehen.>> Und nochmal sorry. In einer formalen Sprachdefinition hat 'der gesunde>> Menschenverstand' nichts zu suchen.>> Das sehe ich ganz anders.
OK. dann ist für mich der 'case closed' wie man so schön sagt.
Verbreite weiter deine falschen Konzepte und verwende Begriffe falsch.
Aber wundere dich nicht, wenn dir dann etwas strengerer Wind um die Nase
pfeift und darauf aufmerksam gemacht wirst, wenn du Begriffe nicht so
verwendest, wie sie von der Definition her gedacht sind.
> Wir reden hier über Begriffe, die es auszulegen gilt
Da gibt es nichts auszulegen.
Was ein Zuweisungsoperator ist und was nicht, ist exakt geregelt. Kein
Spielraum für Interpretationen.
Edit:
Du gehörst wohl auch zu denjenigen, die um 3 Uhr früh mit Polizisten
diskutieren, ob es ok war die rote Ampel zu überfahren, wo doch um die
Tageszeit kein Verkehr auf den Strassen ist. Schliesslich sind rote
Ampeln ja auch Auslegungssache.
Bitflüsterer schrieb:> @ BD244C>> Ich vermute ich kann ein wenig nachvollziehen, was in Dir vorgeht. Es> ist allerdings nicht ganz angenehm mit Dir auf die bisherige Weise über> das Thema zu reden.> Lass doch das Thema mal einige Zeit ruhen. Wenn es Dir dann noch wichtig> ist, dann kannst Du es ja nochmal aufgreifen.
Ja, da hast du wohl recht. Jetzt beginnt auch die Phase, wo mit
Quelltext auf mich eingeschossen wird. Die Profis füttern ihre Kanonen,
um den Spatz zu erlegen. Das schaffen sie dann auch ohne weiteres, weil
es mir an Übung fehlt (wie leider meistens). Mir ging es ursprünglich
nur darum, einen Begriff nicht derart überzustrapazieren, sondern etwas
gelassener damit umzugehen. Und mir geht diese Schlaumeierei, die immer
alles besser wissen will und doch so oft daneben liegt auf einfach den
Senkel. Naja, ich wollte ja schon vorhin aufhören und muss nun Zeit
aufholen. Der Mainstream hier ist sich ja des recht Habens einig,
dagegen ist kein Kraut gewachsen. Ist auch im Grunde genommen nicht
wichtig (wie so vieles im Leben).
;)
BD244C schrieb im Beitrag #3999468:
> Seit wann gibt es denn eine dritte Ausgabe? Habe ich da was verpasst?
Offenbar hast du das.
Was C ist und wie es funktioniert wird von einem ISO Gremium definiert
und nicht mehr von den Herren Kernighan und Ritchie.
Was die beiden selbstverständlich nicht daran hindert (so wie jeden
anderen Autor auch) ein Buch darüber zu schreiben. Aber auch wenn das
Buch von Kernighan&Ritchie stammt, haben die beiden nicht mehr
autoritäre Aussagekraft, wie jeder andere Autor auch.
BD244C schrieb im Beitrag #3999522:
> Ja, da hast du wohl recht. Jetzt beginnt auch die Phase, wo mit> Quelltext auf mich eingeschossen wird. Die Profis füttern ihre Kanonen,> um den Spatz zu erlegen.
Was nicht passiert wäre, wenn du nicht mit deinem Luftdruckgewehr
angefangen hättest
Beitrag "Re: Zuweisung zweidimensionales Array"
OK. Es passiert mir auch manchmal, dass ich daneben haue. Aber im
allgemeinen weiss ich recht gut Bescheid, was ich mit der exakten
Sprachdefinition beweisen kann und was nicht. Und welche Aussage ich
machen kann und welche nicht.
Karl Heinz schrieb:> Du gehörst wohl auch zu denjenigen, die um 3 Uhr früh mit Polizisten> diskutieren, ob es ok war die rote Ampel zu überfahren, wo doch um die> Tageszeit kein Verkehr auf den Strassen ist. Schliesslich sind rote> Ampeln ja auch Auslegungssache
Nein, genau das Gegenteil stimmt. Ich bin grundsätzlich nett zu den
Herren in Blau, wenn sie mich mal anhalten. Das erspart(e) mir dann auch
die Gebühr für das Nichtmitführen meines Führerscheins nicht berappen zu
müssen (blieb bei einer mündlichen Verwarnung). Der gesunde
Menschenverstand sagt mir wann ich mich wie zu verhalten habe. Ich bin
übrigens schon lange aus dem Alter raus, wo man morgens um 3 Uhr als
Fußgänger an irgendwelchen Ampeln herumhängt.
Mit dem "Zuweisungsoperator" hast du dich jetzt auf einen Begriff
eingeschossen, der gar nicht von mir war und den ich auch nicht als
auslegungsfähig angesehen habe.
BD244C schrieb im Beitrag #3999537:
> Mit dem "Zuweisungsoperator" hast du dich jetzt auf einen Begriff> eingeschossen, der gar nicht von mir war und den ich auch nicht als> auslegungsfähig angesehen habe.
du hast doch das Zitat gepostet!
> " .. Bei einer Initialisierung steht ein Zuweisungsoperator nach dem> deklariertem Array, .. "
um dem Beweis zu liefern, das man Array etwas zuweisen kann.
BD244C schrieb im Beitrag #3999537:
> Mit dem "Zuweisungsoperator" hast du dich jetzt auf einen Begriff> eingeschossen, der gar nicht von mir war und den ich auch nicht als> auslegungsfähig angesehen habe.
Du mögest vielleicht nochmal an den Anfang der Postingkette zurückkehren
Beitrag "Re: Zuweisung zweidimensionales Array"
und darüber nachdenken, wer hier den Begriff ins Spiel gebracht hat um
damit welche Aussage zu diskreditieren.
Wenn du dann noch aus der Diskussion mitgenommen hast, dass es eben
nicht egal ist, ob man sagt, dass etwas initialisiert wird oder ob etwas
zugewiesen wird, dann hat der Thread tatsächlich etwas gebracht.
Nämlich das Verständnis deinerseits, dass auch in C eine Zuweisung und
eine Initialisierung konzeptionell 2 verschiedene Dinge sind, mit
unterschiedlichen Regeln. Und das nicht alles, was dafür sorgt, dass im
Speicher bestimmte Bytes bestimmte Werte bekommen automatisch eine
Zuweisung ist.
Wir sind doch hier nicht Töpfereikurs, bei dem man diskutieren kann, ob
etwas noch ein Aschenbecher ist oder doch schon eine Vase. Wir reden
hier über eine Programmiersprache. Noch dazu eine, für die es eine
verbindliche Sprachdefinition gibt.
Ein Array kann man nicht zuweisen nur initialisieren. Wäre Herr BD244C
etwas freundlicher würde ich mir sogar die Mühe machen die
entsprechenden Stellen aus dem Standard heraussuchen. Aber so ...
Peter II schrieb:> du hast doch das Zitat gepostet!> um dem Beweis zu liefern, das man Array etwas zuweisen kann.
Ich habe mich vor allem gegen deinen Satz hier gewendet:
Peter II (Gast) schrieb:
>weil man Array nichts zuweisen kann. Egal on 1 oder mehr dimensional.>Man kann sie nur initalisieren.
und dir zu erklären versucht, dass eine Initialisierung nichts anderes
ist als ein ZUWEISEN von Werten ihre Platzhalter, nur eben INITIAL = am
Anfang! That's all. Der formale Akt des INITIALISIERENS ist nichts
anderes als ein spezieller Fall einer Wertezuweisung. Was denn sonst!
Das der anderen Regeln unterliegt als eine Zuweisung mitten im Programm
ist doch überhaupt kein Widerspruch. Wegen mir kannst du auch anstatt
von ZUWEISUNG von BELEGUNG sprechen. Das ist aber Jacke wie Hose.
Wichtig ist nur, dass man das Regelwerk dazu kennt und beachtet. Bei
Nichtbeachtung hagelt es eben dann Fehlermeldungen.
BD244C schrieb im Beitrag #3999575:
> und dir zu erklären versucht, dass eine Initialisierung nichts anderes> ist als ein ZUWEISEN von Werten ihre Platzhalter, nur eben INITIAL = am> Anfang! That's all. Der formale Akt des INITIALISIERENS ist nichts> anderes als ein spezieller Fall einer Wertezuweisung. Was denn sonst!
Ein Apfel und eine Birne sind auch nicht das gleiche auch wenn beiden
Vitamine haben.
Es gibt eine Initialisierung und eine Zuweisung.
Array kann man nichts zuweisen.
Es haben genug Leute versucht dir das zu erklären.
Karl Heinz schrieb:> Wenn du dann noch aus der Diskussion mitgenommen hast, dass es eben> nicht egal ist, ob man sagt, dass etwas initialisiert wird oder ob etwas> zugewiesen wird, dann hat der Thread tatsächlich etwas gebracht.> Nämlich das Verständnis deinerseits, dass auch in C eine Zuweisung und> eine Initialisierung konzeptionell 2 verschiedene Dinge sind, mit> unterschiedlichen Regeln.
Lieber Karl-Heinz, du hast leider wie die anderen hier nicht begriffen,
worin sprachlich der Unterschied zwischen "initialisieren" und
"zuweisen" besteht. Darum lies nochmals den Absatz den ich gerade dazu
schrieb. Initialisieren ist ein Spezialfall von zuweisen, mit
(selbstverständlich) eigenen Regeln. Aber initialisieren heißt hier
nichts anderes als INITIAL-ZUWEISEN, also zu Beginn belegen (fällt dir
was auf!!). Der eigentliche Akt ist IMMER einen Platzhalter mit einem
Wert zu BELEGEN, d.h. ihm (dem Platzhalter) ein- oder mehrere Werte
ZUZUWEISEN.
Daran lässt sich nun mal nichts ändern.
BD244C schrieb im Beitrag #3999591:
> Lieber Karl-Heinz, du hast leider wie die anderen hier nicht begriffen,> worin sprachlich der Unterschied zwischen "initialisieren" und> "zuweisen" besteht.
Sorry.
Mir scheint eher du bist derjenige der nicht begreift oder begreifen
will, dass man sich um einen gewissen Grad von Exaktheit bemühen muss.
> schrieb. Initialisieren ist ein Spezialfall von zuweisen
für deine Privatdefinition von 'zuweisen'.
Für alle anderen, inklusive dem Norm-Gremium und der Sprachdefinition:
nein, ist es nicht. Es sind 2 verschiedene Dinge.
Im Zweifel halte ich mich lieber an die Definitionen im Sprachstandard
als an deine hemdsärmeligen Versuche. Denn die erklären mir noch so
manch andere Unterschiede.
BD244C schrieb im Beitrag #3999591:
> du hast leider wie die anderen hier nicht begriffen,
Wieder so einer: "Ein Geisterfahrer, hier sind hunderte!"
:-(
Man sollte erkennen wann man unrecht hat, aber Fehler zuzugeben ist für
manche halt unmöglich
BD244C schrieb im Beitrag #3999600:
> Jetzt weiß ich langsam wie sich Galileo Galilei von der heiligen> Inquisition gefühlt haben muss
Nenn dich am besten Zweistein, du leidest massiv an Selbstüberschätzung.
BD244C schrieb im Beitrag #3999600:
> Jetzt weiß ich langsam wie sich Galileo Galilei von der heiligen> Inquisition gefühlt haben muss, als er zum Widerruf gezwungen wurde.
Mir dem einen Unterschied, dass Gallileo recht hatte und die
Inquisitionsbehörde nicht.
Nur dass hier der Fall genau umgekehrt liegt: du hast eben nicht recht.
Wenn man schon ein Gallileo Gambit macht, sollte man dann auch in der
Situation Gallileos sein: man muss auch tatsächlich recht haben. Und
zwar auch dann, wenn man genauer hinsieht.
Karl Heinz schrieb:> Wenn man schon ein Gallileo Gambit macht, sollte man dann auch in der> Situation Gallileos sein: man muss auch tatsächlich recht haben. Und> zwar auch dann, wenn man genauer hinsieht.
Zumal der Fall hier wirklich nicht schwer gelagert ist.
In C wird zwischen Zuweisung und Initialisierung unterschieden.
Einem Array kann man nichts zuweisen, wohl aber kann man es
initialisieren.
2 Hauptwörter, 2 Zeitwörter. Jedes Zeitwort gehört zu einem Hauptwort
und beschreibt den jeweiligen Vorgang. Ein Vorgang, der inklusive
Nebenbedingungen exakt definiert ist.
Eigentlich ganz einfach. Da muss man nichts interpretieren und man muss
nichts auslegen. Man muss nur akzeptieren, dass die Sachen eben genau so
sind und für den jeweiligen Vorgang das richtige Verb benutzen. Dann
folgt alles andere daraus ganz automatisch.
Selbiges für Definition und Deklaration bzw. definieren und deklarieren.
Naja. Wenn man sich mal BD244C Standpunkt zu nähern versucht, dann
scheint mir das möglich zu sein, in dem man von dem Standard absieht.
Damit hat man die Möglichkeit die "Identitätsbeziehung", die BD244C
zwischen Zuweisung und Initialisierung herstellt, recht weit auszulegen.
Da das Zeichen '=' in beiden Zusammenhängen benutzt wird, liegt die
Assoziation nahe und sie ist, meiner Meinung nach plausibel.
Nur wollten wir (der TO) hier ja hier eigentlich nicht vom Standard
absehen, denn die Frage richtete sich ja auf ein konkretes Problem mit
einem Code und einer Fehlermeldung. Und die richtet sich definitiv nach
dem Standard. Und der Standard definiert einen Unterschied zwischen den
Kategorieren.
Insofern ist es für das Thema überhaupt nicht nützlich, die oben
erwähnte Assoziation einzuführen. Der TO erhält die Meldung genau
deswegen, weil der Standard den Unterschied in dieser Weise und so
festlegt und nicht weil der Compiler nicht so phantasivoll ist wie
BD244C ist.
Es ist in diesem Zusammenhang vielleicht nützlich zu erwähnen, das
Sprach-Definitionen nicht "richtig" oder "falsch" sind. Höchstens
zweckmässig, etc.
Bitflüsterer schrieb:> Damit hat man die Möglichkeit die "Identitätsbeziehung", die BD244C> zwischen Zuweisung und Initialisierung herstellt, recht weit auszulegen.> Da das Zeichen '=' in beiden Zusammenhängen benutzt wird, liegt die> Assoziation nahe und sie ist, meiner Meinung nach plausibel.
Oh.
Das sehe ich ganz genau so.
Mir ist schon klar, das gerade Neulinge sich nicht darüber bewusst sind,
dass das '=' in
1
inti=6;
und
1
inti;
2
i=6;
nicht komplett dieselbe Bedeutung haben, auch wenn das Endergebnis
dasselbe ist.
Aber es ist eben genau dieser kleine feine formale Unterschied, der
erklärt warum
1
constintj=8;
legal ist, während
1
constintj=8;
2
j=9;
nicht legal ist.
Oder eben auch, warum es hier geht, warum formal ein
1
inta[]={1,2,3};
erlaubt ist, während ein
1
inta[3];
2
a={1,2,3};
eben nicht erlaubt aus, selbst wenn beides auf den ersten Blick
eigentlich identisch aussieht. Die beiden '=' bedeuten eben nicht das
gleiche. Die beiden Anweisungen sind aus ganz unterschiedlichen
Anweisungskategorien. Das eine ist eine Variablendefinition, das andere
eine ausführbare Anweisung.
Ich versteh schon, dass man das durch die etwas Unscharf-Brille durchaus
als eigentlich den gleichen Vorgang ansehen könnte. Wenn da nicht die
Nebenbedingungen wären, hätte ich auch kein Problem damit. Aber die
Nebenbedingungen existieren nun mal und verbieten mir, das eine als eine
irgendwie speziellere Form des anderen aufzufassen. Da die Sache aber
viel leichter zu verstehen ist, wenn man die Begriffe streng trennt, ist
es auch nicht zielführend die Begriffe erst mal miteinander zu
vermanschkern nur um sich dann sprachlich wieder um einen Haufen
Ausnahmen rumzuwinden.
Bitflüsterer schrieb:> Es ist in diesem Zusammenhang vielleicht nützlich zu erwähnen, das> Sprach-Definitionen nicht "richtig" oder "falsch" sind.
Ist eine Definition nicht per Definition richtig?
@ Karl Heinz
> Ich versteh schon, dass man das durch die etwas Unscharf-Brille durchaus
als eigentlich den gleichen Vorgang ansehen könnte. Wenn da nicht die
Nebenbedingungen wären, hätte ich auch kein Problem damit. Aber die
Nebenbedingungen existieren nun mal und verbieten mir, das eine als eine
irgendwie speziellere Form des anderen aufzufassen.
Vielleicht verbieten sie Dir das doch nicht, oder jedenfalls nicht
solange Du Dich der Situation näherst.
Anders ausgedrück: Ständiges formales Denken bedeutet ebenso ein
Ungleichgewicht wie ständiges assoziatives Denken.
Genau genommen bestand der der "Irrtum" von BD244C darin, ein streng
formales Argument von Peter II 05.02.2015 10:52 in den Bereich des
assoziativen Denkens zu übertragen und sich dabei auf den
Wikipedia-Artikel zu stützen.
> Da die Sache aber viel leichter zu verstehen ist, wenn man die> Begriffe streng trennt, ist es auch nicht zielführend die Begriffe> erst mal miteinander zu vermanschkern nur um sich dann sprachlich> wieder um einen Haufen Ausnahmen rumzuwinden.
Mag sein. Jeder "versteht" auf seine eigene Weise. BD244C hat es auf die
gezeigte Weise getan und konnte Deine Antwort, dass Dein Gegenargument
auf der Existenz und der Relevanz einer formalen Definition beruht nicht
in Beziehung zu seinem "Verstehens"-Modus setzen.
Das hat man ja an seiner Reaktion gesehen. Eine solche
"vermanschkerlung" zu ignorieren halt ich für genauso kontraproduktiv
wie sie selbst.
Nur war BD244C gefühlsmäßig nicht in der Lage, seinen eigenen Modus zu
erfassen. Deswegen ja auch mein Vorschlag zur Pause. Aber naja. Das
gipfelte in dem Galileo-Vergleich, den ich für ein klares Zeichen halte,
dass Selbsterkenntnis im Moment nicht möglich ist.
Meine Antwort war ohnehin nicht als Kritik an Deiner Argumentation
gedacht sondern als Denkanstoss an BD244C wenn er wieder ruhiger ist und
hier reinguckt.
@BD244C:
Es ist in Diskussionen in höchstem Maße förderlich, wenn jeder
Diskussionsteilnehmer dieselbe Sprache spricht, d.h. jeder unter
demselben Begriff auch dasselbe versteht. Das ist in der Alltagssprache
oft nicht möglich, weil viele Begriffe keine feststehende Definition
haben.
Genau aus diesem Grund entstanden und entstehen Fachsprachen, in denen
häufig verwendete Begriffe genau definiert werden. Wenn bspw. in einer
Diskussion unter Mathematikern der Begriff "Menge" fällt, weiß jeder
Teilnehmer sofort gemeint ist, obwohl der Begriff in der Alltagssprache
sehr viel weiter gefasst ist.
In diesem Thread geht es um die Programmiersprache C. Eine Diskussion
darüber verläuft dann am effizientesten, wenn jeder die damit
zusammenhängenden Fachbegriffe in gleicher Weise benutzt. Als Referenz
für die Bedeutung dieser Fachbegriffe wird sinnvollerweise der
ISO-Standard herangezogen. Und dort wird nun einmal klar zwischen
"initialization" (Initialisierung) und "assignment" (Zuweisung)
unterschieden.
Vor diesem Hintergrund ist die erste Antwort auf die Frage
Peter II schrieb:> weil man Array nichts zuweisen kann. Egal on 1 oder mehr dimensional.> Man kann sie nur initalisieren.
völlig richtig, klar und eindeutig.
Man könnte allenfalls zum besseren Verständnis für einen C-Neuling
hinzufügen, was der Unterschied zwischen Initialisierung und Zuweisung
ist und warum es diese Unterscheidung gibt.
Natürlich hat nicht jeder C-Programmierer den kompletten Standard im
Kopf, so dass es vorkommen kann, dass er unabsichtlich einen Begriff
anders benutzt als vom Standard vorgesehen. Er sollte dann aber –
nachdem er von anderen darauf hingewiesen wurde – nicht mehr auf seiner
eigenen Definition bestehen, sondern sich sprachlich der C-Community
anpassen, die sich bereits auf eine gemeinsame Definition geeinigt hat.
Dir scheint das äußerst schwer zu fallen, was unnötigerweise zu über 50
Thread-Beiträgen geführt hat, die kaum etwas zum ursprünglichen Thema
beitragen. So eine Diskussion ist alles andere als effizient.
BD244C schrieb im Beitrag #3999450:
> Rolf Magnus schrieb:>> diese Schlußfolgerung erschließt sich mir nicht. Weil "initial" soviel>> wie "anfänglich" heißt, muß es eine Zuweisung sein?>> Es heißt nicht "soviel wie anfänglich", es HEISST anfänglich und nichts> anderes.
Ok, dann wiederhole ich die Frage in korrigierter Form:
Weil "initial" "anfänglich" HEISST, muß es eine Zuweisung sein?
> Initialisierung ist einfach ein spezieller Akt einer Zuweisung> von Werten an Variable. Das ist alles. Wie das im einzelnen geschieht,> etwa bei Arrays oder einfachen Variablen, ist geregelt. Punkt und aus.
Nun, die C-Definition beschreibt es anders.
BD244C schrieb im Beitrag #3999496:
> Karl Heinz schrieb:>>> Der gesunde Menschenverstand reicht, um das zu verstehen.>> Und nochmal sorry. In einer formalen Sprachdefinition hat 'der gesunde>> Menschenverstand' nichts zu suchen.>> Das sehe ich ganz anders. Für mich gibt es hier keinen Widerspruch. Wir> reden hier über Begriffe, die es auszulegen gilt und nicht über streng> mathematische Definitionen.
C definiert die Begriffe streng. Auszulegen gibt's da nichts.
> Den Unterschied, lieber Karl-Heinz, solltest du eigentlich verstehen. So> 100 prozentig festgelegt wie du hier meinst sind einige Begriffe in der> Programmiererei gar nicht.
Leider sind sie das nicht immer, wodurch man manchmal an einander
vorbeiredet. Im technischen Bereich und gerade in der Programmierung
sind solche unscharfen Begriffsdefinitionen nicht immer zu vermeiden,
aber sie sind eigentlich immer von Nachteil. Programmiersprachen selbst
sind dagegen möglichst eindeutig definiert, denn wenn der Computer nicht
exakt das tut, was man ihm sagt, sondern stattdessen deinen Code
irgendwie auslegen kann, wäre das ziemlich schlecht.
> Die Bedeutung der Begriffe hängt also immer von Kontext ab, in dem sie> zur Anwendung kommen.
Genau, und im Kontext "C-Programmierung" ist deine Verwendung des
Begriffs falsch. Der Begriff "Stock" hat auch ganz unterschiedliche
Bedeutungen. Damit kann ein Stab, ein Geschoss oder eine Börse gemeint
sein. Jeder dieser Begriffe hat wieder mehrere Bedeutungen. In einer
Diskussion kommt aber nur Unsinn raus, wenn jeder die selben Begriffe
verwendet, aber unterschiedliche Bedeutungen meint. Ist dir noch nicht
aufgefallen, daß du der einzige bist, der hier einen Begriff in einer
anderen Bedeutung verwendet, als sämtliche anderen
Diskussionsteilnehmer?
BD244C schrieb im Beitrag #3999502:
> und dass es Neuerungen wie C99, C11 gibt tut hier nichts zur Sache.
"Neuerungen" ist gut... C99 hat vor 16 Jahren C89 ersetzt und wurde
selbst wiederum vor 4 Jahren durch C11 ersetzt.
BD244C schrieb im Beitrag #3999522:
> Mir ging es ursprünglich nur darum, einen Begriff nicht derart> überzustrapazieren, sondern etwas gelassener damit umzugehen.
Du bist doch eigentlich derjenige, der damit angefangen hat, beharrlich
auf einer ganz bestimmten Bedeutung des Begriffs zu bestehen. Daß sich
dann Widerstand regt, wenn diese dann auch noch falsch ist, ist doch
kein Wunder.
> Und mir geht diese Schlaumeierei, die immer alles besser wissen will und> doch so oft daneben liegt auf einfach den Senkel.
Dir ist noch gar nicht aufgefallen, daß du selbst in diese Kategorie
fällst, oder?
Karl Heinz schrieb:> Wir sind doch hier nicht Töpfereikurs, bei dem man diskutieren kann, ob> etwas noch ein Aschenbecher ist oder doch schon eine Vase. Wir reden> hier über eine Programmiersprache.
Der Spruch ist gut, der wäre echt signaturwürdig, wenn's denn hier
Signaturen gäbe ;-)
BD244C schrieb im Beitrag #3999575:
> Der formale Akt des INITIALISIERENS ist nichts anderes als ein> spezieller Fall einer Wertezuweisung. Was denn sonst!
Na einfach eine Initialisierung. Es muss gar nicht 5 Dinge auf einmal
sein. Es kann auch einfach nur eine Initialisierung sein - nicht mehr,
und nicht weniger.
> Das ist aber Jacke wie Hose. Wichtig ist nur, dass man das Regelwerk> dazu kennt und beachtet.
Richtig, aber wenn das Regelwerk sagt, daß man seine Beine besser mit
Hosen bedeckt, werde ich die nicht stattdessen in die Jackenärmel
stecken, nur weil das ja auch ginge, denn gerade um diese Zeit könnte
das "untenrum" etwas frisch werden.
Definierer schrieb:> Bitflüsterer schrieb:>> Es ist in diesem Zusammenhang vielleicht nützlich zu erwähnen, das>> Sprach-Definitionen nicht "richtig" oder "falsch" sind.> Ist eine Definition nicht per Definition richtig?
Das würde ich auch sagen. Die Sprachdefinition definiert ja erst, was
richtig und was falsch ist.
Ein letztes mal noch zum Abschluss
Karl Heinz schrieb:> Oder eben auch, warum es hier geht, warum formal ein int a[] = { 1, 2,> 3 };> erlaubt ist, während ein int a[3];> a = { 1, 2, 3 };> eben nicht erlaubt aus, selbst wenn beides auf den ersten Blick> eigentlich identisch aussieht.
Warum ist es denn nicht erlaubt? Ganz einfach, weil man es bisher nicht
erlaubt hat. Würde man es erlauben, würde kein Hahn danach krähen und
jeder C Programmierer hielte solche Zuweisungen für eine
Selbstverständlichkeit. Genauso hättest du mir als Beispiel eines
"verbotenen Aktes" in C den (nach deiner Auffassung) "Unterschied"
zwischen den Anweisungen
i = i + 1; // erlaubt
und
i++; // "verboten", weil (angenommen) nicht im Regelwerk
vorhalten können. Nur besteht dieses "Verbot" eben nicht (oder nicht
mehr seit Unzeiten).
Yalu X. schrieb:> Man könnte allenfalls zum besseren Verständnis für einen C-Neuling> hinzufügen, was der Unterschied zwischen Initialisierung und Zuweisung> ist und warum es diese Unterscheidung gibt.
Man könnte auch was ganz anderes machen. Man könnte einem C-Neuling
vermitteln nicht in die dogmatische Denkfalle zu tappen, in der IHR ALLE
(bis auf Bitflüsterer) hoffnungslos gefangen seid. Ihr habt verlernt
mal zwischen den Zeilen zu denken und VERSTÄNDNIS abseits aller
Definitionen für Begriffe zu entwickeln. Wie erklärt ihr denn einem Kind
eure sogenannte "Initialisierung"? Das kann nämlich mit diesem Fremdwort
Initialisierung nix anfangen. Doch nicht anders, als mit Kästchen, die
Namen tragen, die Programmierer Variable nennen, in die wir vor Beginn
mit der eigentlichen Programmausführung WERTE ZUFÜHREN, BELEGEN,
ZUWEISEN. Was denn sonst! Und das nennen wir nun mal Initialisierung
oder auch wie es eigentlich besser heißen sollte: Initial-Zuweisung.
Letztere unterliegt einem anderen Regelwerk als ein bloße Zuweisung. Das
ist alles.
Rolf Magnus schrieb:> BD244C schrieb:>> Der formale Akt des INITIALISIERENS ist nichts anderes als ein>> spezieller Fall einer Wertezuweisung. Was denn sonst!>> Na einfach eine Initialisierung. Es muss gar nicht 5 Dinge auf einmal> sein. Es kann auch einfach nur eine Initialisierung sein - nicht mehr,> und nicht weniger.
Und gerade das ist dieser von dir und anderen unsägliche Dogmatismus des
Denkens. Eure Selbstbeweihräucherung geht sogar so weit, dass ihr mir
unterstellt, ich kenne nicht den Unterschied zwischen Initialisierung
und Zuweisung. Den kenne ich sehr wohl. Aber ihr wollt nicht begreifen,
was hinter einer Initialisierung eigentlich steckt, nämlich das simple
Zuweisen von Werten. Ihr seid betriebsblind geworden. Das ist alles.
Bitflüsterer schrieb:> Genau genommen bestand der der "Irrtum" von BD244C darin, ein streng> formales Argument von Peter II 05.02.2015 10:52 in den Bereich des> assoziativen Denkens zu übertragen und sich dabei auf den> Wikipedia-Artikel zu stützen.
Den Wikipedia-Artikel brauche ich dabei eigentlich gar nicht. Der war
nur ein Schuss auf die Schnelle, um zu zeigen, dass es auch andere gibt,
die ähnlich denken (nur ein paar Sekunden gegoogelt). Mit dem
Formalismus hast du recht. Nimm mein Beispiel mit dem Kind. Das
entzaubert dir ruckzuck den Begriff "Initialisierung" und übrig bleibt
ein simples Zuweisen von Werten an ihre Platzhalter. Das die anwesende
Meute hieraus Zähne fletschend in ihrer dogmatischen Betriebsblindheit
sofort die Schlussfolgerung zieht, man wolle den Begriff der
Initialisierung grundsätzlich verwässern oder gleichsetzen mit dem
Begriff der Zuweisung in C, ist einfach nur falsch. Mir ging es um ein
simples hinter die Begriffe schauen und entmystifizieren. Es ist so
ähnlich als hätte man in den 80er Jahren einem gestandenen Handwerker
beibringen wollen, dass sein Schraubenzieher eigentlich ein
Schraubendreher ist, weil man damit nun mal Schrauben ein- und ausdreht
und nicht zieht. Und dieser Handwerker partout auf seinem gelernten
Begriff seines angeeigneten Regelwerks "Schraubenzieher" beharrt, weil
seine Denke gar keine andere Schlussfolgerung oder Hinterfragung des
Begriffs zulässt. Betriebsblind eben. Da kommste nicht gegen an. Keine
Chance. Der Kreis der gestandenen Handwerker verspottet dich und wirft
dir Unkenntnis vor. Erst von "von oben", d.h. von denen die das
Regelwerk kontrollieren und weiterentwickeln Begriffsumbildungen
erfolgen wird das akzeptiert. Dahinter stecken irrationale Ängste an
Sicherheit zu verlieren und der Unwille selbst eingebrannte Denkmuster
zu hinterfragen. Das man dafür sogar die gute zweite Ausgabe vom K&R mal
eben in den Dreck tritt und abfällig als überholtes Buch hinstellt,
hätte ich mir vorher allerdings wirklich nicht vorstellen können.
Karl Heinz schrieb:> BD244C schrieb:>> Jetzt weiß ich langsam wie sich Galileo Galilei von der heiligen>> Inquisition gefühlt haben muss, als er zum Widerruf gezwungen wurde.>> Mir dem einen Unterschied, dass Gallileo recht hatte und die> Inquisitionsbehörde nicht.> Nur dass hier der Fall genau umgekehrt liegt: du hast eben nicht recht.
Das du so denkst ist doch klar. Die Inquisition hat auch nicht am
gleichen Tag der Anklage ihre eigene Fehlbarkeit begriffen. Das braucht
zeit. Manche brauchen halt länger bis der Groschen fällt.
Eine Initialisierung als Zuweisung zu bezeichnen, weil dadurch die
initialisierte Variable einen Wert zugewiesen bekommt, ist in etwa
vergleichbar damit, den Datentyp uint64_t als double zu bezeichnen,
weil er doppelt so groß wie ein uint32_t ist.
Deswegen noch einmal: Initialisierung und Zuweisung sind in C
feststehende Begriffe, ebenso wie double einen ganz bestimmten
Datentyp bezeichnet. Jede von den vorgegebenen Definitionen abweichende
Verwendung dieser Wörter führt nur zu unnötiger Verwirrung.
BD244C schrieb im Beitrag #4000419:
> Karl Heinz schrieb:>> Oder eben auch, warum es hier geht, warum formal ein int a[] = { 1, 2,>> 3 };>> erlaubt ist, während ein int a[3];>> a = { 1, 2, 3 };>> eben nicht erlaubt aus, selbst wenn beides auf den ersten Blick>> eigentlich identisch aussieht.>> Warum ist es denn nicht erlaubt?
Weil es eine Zuweisung ist und es nicht erlaubt ist, Arrays zuzuweisen.
Ganz einfach. Womit wir wieder beim Anfang der Diskussion sind.
> Würde man es erlauben, würde kein Hahn danach krähen und jeder C> Programmierer hielte solche Zuweisungen für eine Selbstverständlichkeit.
Ja, aber was hat das alles damit zu tun, was eine Initialisierung ist?
> Man könnte auch was ganz anderes machen. Man könnte einem C-Neuling> vermitteln nicht in die dogmatische Denkfalle zu tappen, in der IHR ALLE> (bis auf Bitflüsterer) hoffnungslos gefangen seid.
Und sich stattdessen Begriffe einfach frei nach Belieben umzudefinieren,
einfach nur so, damit's nicht zu langweilig wird?
> Wie erklärt ihr denn einem Kind eure sogenannte "Initialisierung"? Das> kann nämlich mit diesem Fremdwort Initialisierung nix anfangen.
Man könnte es mit "Vorbelegung" übersetzen. Und nein: Belegen und
Zuweisen ist nicht das gleiche.
> Doch nicht anders, als mit Kästchen, die Namen tragen, die Programmierer> Variable nennen, in die wir vor Beginn mit der eigentlichen> Programmausführung WERTE ZUFÜHREN, BELEGEN, ZUWEISEN.
Zuweisen tun wir sie erst danach. In dem Moment, in dem die Variable das
Licht der Welt erblickt, bekommt sie gleich einene Wert. Das ist
Initialisierung. Später wird der Wert geändert, und das kann dann
unter anderem durch Zuweisung geschehen.
Wenn ein Kind auf die Welt kommt, hat es ein bestimmtes Geschlecht. Es
wurde quasi damit initialisert. Wenn es sich später zu einer
Geschlechtsumwandlung entscheidet, wird ihm ein neues Geschlecht
zugewiesen.
> Was denn sonst!
Nochmal: Nicht alle Arten, auf die ein Objekt zu einem Wert kommen kann,
sind automatisch Zuweisungen. Eine Zuweisung ist nur eine von vielen
Möglichkeiten.
Du kannst einen Baum auch mit einer Axt fällen, mit einer Säge, oder
indem du ihn mit einem großen und schweren Fahrzeug umreißt. Aber nicht
jede Art, einen Baum zu fällen, heißt deshalb automatisch "umsägen", nur
weil man das so auch machen könnte.
> Und das nennen wir nun mal Initialisierung oder auch wie es eigentlich> besser heißen sollte: Initial-Zuweisung.
Man hätte es so nennen können. Tut aber keiner außer dir. Eine Zuweisung
ist nun mal nicht das, was im Silizium passiert, wenn eine Variable
einen Wert bekommt, sondern das, was du im Quellcode schreibst, um den
Inhalt einer Variablen durch was anderes zu ersetzen. Und da liegt
meines Erachtens dein fundamentaler Fehler. Du siehst die Zuweisung
nicht als Sprachkonzept, sondern als Beschreibung eines
dahinterliegenden Vorgangs.
> Und gerade das ist dieser von dir und anderen unsägliche Dogmatismus des> Denkens. Eure Selbstbeweihräucherung geht sogar so weit, dass ihr mir> unterstellt, ich kenne nicht den Unterschied zwischen Initialisierung> und Zuweisung.
Wenn es einen Unterschied gibt, sind es zwei verschiedene Dinge.
> Den kenne ich sehr wohl. Aber ihr wollt nicht begreifen,> was hinter einer Initialisierung eigentlich steckt, nämlich das simple> Zuweisen von Werten.
Jeder weiß, was dahinter steckt. Aber jeder außer dir weiß, daß man das
nicht "Zuweisung" nennt.
> Es ist so ähnlich als hätte man in den 80er Jahren einem gestandenen> Handwerker beibringen wollen, dass sein Schraubenzieher eigentlich ein> Schraubendreher ist, weil man damit nun mal Schrauben ein- und ausdreht> und nicht zieht. Und dieser Handwerker partout auf seinem gelernten> Begriff seines angeeigneten Regelwerks "Schraubenzieher" beharrt, weil> seine Denke gar keine andere Schlussfolgerung oder Hinterfragung des> Begriffs zulässt.
Um ganz ehrlich zu sein, denke ich bei dem Begriff "Schraubendreher" an
eine Person, die an einer Drehbank Schrauben anfertigt und nicht an das
Werkzeug, mit dem man Schauben anzieht. Wer um alles in der Welt sagt
denn: "Ich geh mal ein paar Schrauben drehen" (außer vielleicht Werner)?
https://www.youtube.com/watch?v=otTdwVb2UyE> Erst von "von oben", d.h. von denen die das Regelwerk kontrollieren und> weiterentwickeln Begriffsumbildungen erfolgen wird das akzeptiert.
Und bei dir reicht nicht mal das. Denn das Regelwerk sagt klar, was eine
Zuweisung ist, aber du ignorierst das.
> Karl Heinz schrieb:>> Mir dem einen Unterschied, dass Gallileo recht hatte und die>> Inquisitionsbehörde nicht.>> Nur dass hier der Fall genau umgekehrt liegt: du hast eben nicht recht.>> Das du so denkst ist doch klar. Die Inquisition hat auch nicht am> gleichen Tag der Anklage ihre eigene Fehlbarkeit begriffen. Das braucht> zeit. Manche brauchen halt länger bis der Groschen fällt.
Nicht jeder, der anders denkt, hat automatisch Recht.
Yalu X. schrieb:> Deswegen noch einmal: Initialisierung und Zuweisung sind in C> feststehende Begriffe,
Wie oft wollt ihr es ihm noch sagen? Das ist sinnlos, der Junge ist ein
Narzist wie er im Buche steht. Das er unrecht hat kann nicht sein, weil
es nicht sein darf.
Ich hatte oben versucht das mit dem "ein Geisterfahrer, nein hunderte!"
scherzhaft auszudrücken, aber die Kommentare von Galileo und der
Inquisition zeigen dass er das wirklich ernst meint.
Die Diskussion hier ist völlig sinnlos, BD244C wird keinem Argument
folgen. Am besten sollte man den Thread schliessen, überlegt euch
vieleicht einen guten Beitrag zum Thema Initialisierung versus Zuweisung
stehen zu lassen und den Rest zu löschen, denn die hundert sehr
ähnlichen Erklärungsversuche nützen BD244C nichts, und der Rest hat es
auch so verstanden.
Meine Meinung