Gast
#3999248
Warum schmeißt der Compiler bei folgendem Programm die Meldung
1 | |
in den Zeilen mit der Array-Zuweisung? Danke
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
|
Anzeige
|
Zuweisung zweidimensionales Array
Gast
#3999248
Warum schmeißt der Compiler bei folgendem Programm die Meldung
in den Zeilen mit der Array-Zuweisung? Danke
Gast
#3999266
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.
Arrays kann man nur bei der Deklaration auf diese Weise Werte zuweisen. So ginge es z.B.:
Nach der Deklaration kannst du nur den einzelnen Werten zuweisen als sowas wie:
Hm, warum eigentlich diese Inkonsistenz? Sollte doch für den Herrn Compiler kein Problem darstellen, oder?
Gast
#3999280
Boris P. schrieb: > Hm, warum eigentlich diese Inkonsistenz? welche Inkonsistenz? Eine Zuweisung ist etwas völlig anders als eine Initialisierung. 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
Bekanntgabe, dass (irgendwo) eine Variable field existiert. Bei Funktionen wäre das der Prottyp.
Gast
#3999294
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, .. "
Gast
#3999308
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.
Gast
#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. 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.
Gast
#3999350
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?
Gast
#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. 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.
Gast
#3999357
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.
Gast
#3999361
@ BD244C: Blöde Frage, wenn es das gleiche ist, wieso funktioniert die zweite Zeile im folgenden Code dann nicht?
Gast
#3999365
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.
Gast
#3999374
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.
Gast
#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." 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!
Gast
#3999397
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.
Gast
#3999399
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.
Gast
#3999431
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
Gast
#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. 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
beim Versuch das = als Zuweisungsoperator anzuwenden, einen Fehler provoziert. i ist zwar ein lvalue. Aber er ist nicht modifiable. Das '=' in
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
das Komma an dieser Stelle kein Kommaoperator ist, sondern einfach nur ein Komma, welches Argumente voneinander trennt.
Gast
#3999460
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"
Gast
#3999467
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.
Gast
#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? 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. Um noch einen draufzusetzen
was ist hier was?
das hier ist eine Initialisierung. Das = ist der Anzeiger für die Intialisierung
Dieses =
ist wieder der Anzeiger für eine Intialisierung. Die entsprechenden Regeln für Initialisierungen gelten. Dieses = hier
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
sein kann. Genau diese Regel ermöglich zum Beispiel
also das 'Kaskadieren' von Zuweisungen. Da das aber als Initialisierung benutzt werden kann, ist
genauso tauglich, wie auch
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.
Gast
#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. 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.
Gast
#3999498
@ 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.
Gast
#3999502
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.
Gast
#3999522
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.
Gast
#3999537
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.
Gast
#3999546
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.
Gast
#3999570
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 ...
Gast
#3999575
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.
Gast
#3999581
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.
Gast
#3999591
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.
Gast
#3999600
Jetzt weiß ich langsam wie sich Galileo Galilei von der heiligen Inquisition gefühlt haben muss, als er zum Widerruf gezwungen wurde. --- Ende 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.
Gast
#3999635
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
und
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
legal ist, während
nicht legal ist. Oder eben auch, warum es hier geht, warum formal ein
erlaubt ist, während ein
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.
Gast
#3999675
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?
Gast
#3999731
@ 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.
Gast
#3999961
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.
Gast
#4000419
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.
Gast
#4000685
BD244C, verschwinde bitte einfach. Du bist hier nicht willkommen. 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 Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|