Globale vs. Membervariablen (aufgeteilt aus: [Anfänger]: zweidimisionales Array an Funktion Übergeben.)



  • Mach' das Array global 😃
    Nun bitte nicht schimpfen, in C++ wäre es eine Member-Variable und das ist das selbe in grün 😉

    Mod-Hinweis: Geteilt nach https://www.c-plusplus.net/forum/p2533415#2533415


  • Mod

    ralros schrieb:

    Mach' das Array global 😃
    Nun bitte nicht schimpfen, in C++ wäre es eine Member-Variable und das ist das selbe in grün 😉

    Alles daran ist falsch.



  • Was ist daran falsch?
    Wenn man das Array global macht, dann muß man halt etwas mehr darauf aufpassen, daß man keinen Quatsch macht.
    (Wenn das Array seine Gültigkeit in "main()" hat, dann ist es egal, ob es global ist, vom Speicher her gesehen)
    In C++ könnte man es als Member-Variable definieren und das sind für mich auch globale Variablen, auch wenn man sie trügerisch als "private" deklariert.


  • Mod

    ralros schrieb:

    Was ist daran falsch?

    SeppJ schrieb:

    Alles daran ist falsch.

    Es ist ein beschissener Tipp und das weißt du, sonst würdest du nicht darum bitten, dass man nicht schimpft. Wenn es so ein beschissener Tipp ist, warum gibst du ihn dann?

    Dein Nicht-Verständnis von Membervariablen ist keine Rechtfertigung für globale Variablen, sondern nur ein völliges Missverstehen, was Membervariablen sind, was globale Variablen sind, und warum die letzteren unbedingt zu vermeiden sind, wohingegen die ersteren eine super Technik zur Datenorganisation sind. Bitte verbreite keinen Stuss weiter über Themen, von denen du keine Ahnung hast, und ganz besonders nicht als vermeintlich Hilfestellung zu Anfängerfragen. Das macht für den Anfänger alles nur noch schlimmer, weil er nicht erkennen kann, was Unsinn ist und was nicht.

    Wenn du Unklarheiten hast, was eine Membervariable genau ist, usw., dann solltest du vielleicht diese Fragen selber mal stellen.



  • ralros schrieb:

    in C++ wäre es eine Member-Variable

    Es sei noch kurz angemerkt dass ich es so kenne, dass die Arduinos mit den beigelegten Entwicklungstools eigentlich in modernem C++ programmiert werden - auch wenn
    das vielen nicht auffällt und nicht selten umständlichere C-Lösungen gebaut werden, die sich manchmal mit C++ etwas eleganter umsetzen ließen. Möglicherweise liegt das
    an der nicht verfügbaren C++Standardbibliothek und der schwachen Arduino-Doku, die geschrieben ist, als würden die Geräte ein einer Skriptsprache programmiert.



  • Wenn es unkomplizierter ist eine globale Variable zu deklarieren, dann mache ich das - auch wenn ich zugeben, daß ich auch kein Freund von Globalen Variablen bin, aber auch kein Feind!
    Das ich Membervariablen nicht mag, liegt auch daran, daß ich C++ nicht mag 😃
    Vielleicht bin ich auch neidisch, daß man Membervariablen anlegen darf - ohne geächtet zu werden, aber Globale Variablen verpönt sind, das sollten sie aber nur in C++ sein...in C sind Globale Variablen ein "erlaubtes" Stilmittel!


  • Mod

    ralros schrieb:

    Wenn es unkomplizierter ist eine globale Variable zu deklarieren, dann mache ich das - auch wenn ich zugeben, daß ich auch kein Freund von Globalen Variablen bin, aber auch kein Feind!
    Das ich Membervariablen nicht mag, liegt auch daran, daß ich C++ nicht mag 😃
    Vielleicht bin ich auch neidisch, daß man Membervariablen anlegen darf - ohne geächtet zu werden, aber Globale Variablen verpönt sind, das sollten sie aber nur in C++ sein...in C sind Globale Variablen ein "erlaubtes" Stilmittel!

    Der Verweis auf C++ ist offenbar grober Unfug, denn Membervariablen gibt es in genau der gleichen Weise auch in C. Und ganz sicher sind globale Variablen in C in keiner Weise anders nützlich als in C++ - es gibt ja keinen substantiellen Unterschied in ihrem Verhalten.

    Der Hinweis war auch sicher OT, weil es dem OP gerade nicht um die Frage ging, ob Arrays besser global verwendet werden sollten, anstatt sie als Funktionsargumente weiterzureichen. Sollte das globale Variablenthema weiterverfolt werden, wäre es folglich angebracht, den Thread zu splitten.



  • Ja, es war eigentlich nur ein Tipp von mir, denn so würde ich das machen...einen mehrdimensionalen Array, würde ich nicht einer Funktion übergeben - eine Diskussion wollte ich eigentlich nicht auslösen.
    Außer, das Array wäre nur kurzlebig und speicherintensiv, dann könnte man über eine Funktionsübergabe nachdenken, aber auch da könnte man die Elemente dynamisch allozieren und dann den (globalen) Speicher freigeben bei Nichtgebrauch.



  • ralros schrieb:

    Wenn es unkomplizierter ist eine globale Variable zu deklarieren, dann mache ich das - auch wenn ich zugeben, daß ich auch kein Freund von Globalen Variablen bin, aber auch kein Feind!
    Das ich Membervariablen nicht mag, liegt auch daran, daß ich C++ nicht mag 😃
    Vielleicht bin ich auch neidisch, daß man Membervariablen anlegen darf - ohne geächtet zu werden, aber Globale Variablen verpönt sind, das sollten sie aber nur in C++ sein...in C sind Globale Variablen ein "erlaubtes" Stilmittel!

    In C ist Modularisierung über einzelne Dateien möglich. Mittels 'static' erhältst du dateiglobale Variablen, die in anderen Dateien nicht sichtbar sind. Das kann auch nicht mit 'extern' umgangen werden.

    Das finde ich sehr nützlich.


  • Mod

    covfefe schrieb:

    In C ist Modularisierung über einzelne Dateien möglich. Mittels 'static' erhältst du dateiglobale Variablen, die in anderen Dateien nicht sichtbar sind. Das kann auch nicht mit 'extern' umgangen werden.

    Das finde ich sehr nützlich.

    In C sind ist vor allem das Konzept von Membervariablen genau wie in C++ möglich und auch die übliche Art und Weise C zu programmieren. Ganz ohne static, extern oder solchen Quatsch, der damit nichts zu tun haben sollte.



  • SeppJ schrieb:

    In C sind ist vor allem das Konzept von Membervariablen genau wie in C++ möglich

    Du meinst Strukturen? Da musst du aber immer einen Zeiger herumreichen. In C++ geht das automatisch.


  • Mod

    covfefe schrieb:

    SeppJ schrieb:

    In C sind ist vor allem das Konzept von Membervariablen genau wie in C++ möglich

    Du meinst Strukturen? Da musst du aber immer einen Zeiger herumreichen. In C++ geht das automatisch.

    Und? Trotzdem besteht technisch kein Unterschied. Deswegen ist das ganze Gelaber hier im Thread, dass Membervariablen in C++ global wären, oder dass man das Äquivalent von Membervariablen in C durch static nachbauen könne, allesamt absoluter Blödsinn. C++ ist in dieser Hinsicht nur Syntaxzucker für die sowieso in C übliche Art und Weise, Objektorientierung umzusetzen. Und umgekehrt gibt es keinen Grund, in C zu komischen Methoden zu greifen, um Objektorientierung zu verwirklichen, wenn es eine gute, bewährte und übliche Art und Weise gibt, das zu machen!



  • ... gelöscht ...


  • Mod

    covfefe schrieb:

    SeppJ schrieb:

    Und umgekehrt gibt es keinen Grund, in C zu komischen Methoden zu greifen, um Objektorientierung zu verwirklichen, wenn es eine gute, bewährte und übliche Art und Weise gibt, das zu machen!

    Was wäre das Äquivalent zu den C++-Zugriffsmodifikatoren 'private' und 'public' in C? Wie macht man das auf die übliche Art?

    Gar nicht, da es die Zugriffsmodifikatoren auch reiner Syntaxzucker sind, der überhaupt gar keine Bedeutung im späteren Programm hat.

    Worauf willst du eigentlich hinaus? Wenn du schon einmal gesehen hast, wie man C programmiert, dann wüsstest du all dies. Und wenn du es noch nie gesehen hast, wieso diskutierst du hier dann herum, anstatt es zu lernen? Ich habe gerade leider sehr den Eindruck, dass es dir irgendwie eher darum geht, Internetpunkte zu sammeln, anstatt dich selber zu verbessern.



  • SeppJ schrieb:

    Worauf willst du eigentlich hinaus? Wenn du schon einmal gesehen hast, wie man C programmiert, dann wüsstest du all dies. Und wenn du es noch nie gesehen hast, wieso diskutierst du hier dann herum, anstatt es zu lernen? Ich habe gerade leider sehr den Eindruck, dass es dir irgendwie eher darum geht, Internetpunkte zu sammeln, anstatt dich selber zu verbessern.

    Tut mir leid. Ich wollte dich nicht ärgern. Ich weiß auch gar nicht was Internetpunkte sind.

    Ich ziehe hiermit die Frage zurück. War dumm von mir. Ich hätte auch selber googeln können.

    Nichts für Ungut.


  • Mod

    Es ist ja ok, Fragen zu stellen, aber ich hatte schwer den Eindruck, als wolltest du die Antwort gar nicht wirklich wissen, sondern - metaphorisch gesprochen - dein Revier markieren.



  • SeppJ schrieb:

    Es ist ja ok, Fragen zu stellen

    Sollte so sein, aber ich mache wohl irgendwas falsch. Wenn mir der globale Moderator schon sagt, dass er nicht diskutieren will, dann ist das hier nicht das richtige Forum für mich.

    Daher bitte ich darum, meinen Account zu löschen. Nicht böse gemeint, aber wir passen einfach nicht zusammen.



  • covfefe schrieb:

    Sollte so sein, aber ich mache wohl irgendwas falsch.

    Ja. Schaut nämlich so verdächtig nach Trollerei aus, dass es keinen Sinn hat, zu diskutieren. Und es ist Aufgabe der Mods, sowas aufzuräumen.



  • Finnegan schrieb:

    ralros schrieb:

    in C++ wäre es eine Member-Variable

    Es sei noch kurz angemerkt dass ich es so kenne, [...]

    bezüglich Split: Auch wenn ich hier ein bisschen mehr zitiert habe, als ich eigentlich wollte, möchte ich meinen Beitrag nicht als Teil der Diskussion um "Globale vs. Membervariablen" verstanden wissen.
    Es ging mir hauptsächlich darum hervorzuheben, dass der Compiler der Arduino-Entwicklungsumgebung ein C++-Compiler ist. Das wird scheinbar oft übersehen, was ein wenig Schade ist, da gerade
    das Arduino-Ökosystem ein schönes Beispiel dafür ist, dass die begrenzten Ressourcen von Mikrocontroller-Umgebeungen kein Argument gegen C++ sein müssen.


  • Mod

    @Finnegan: Entschuldigung, du hast recht; ich hatte mir den Text nicht nochmal ganz durchgelesen, sondern jeweils nur überflogen, um zu entscheiden, ob der jeweilige Text stehen bleiben soll oder nicht. Das nächste mal splitte ich gleich, gibt ja keinen Grund mir selber die Arbeit schwerer zu machen als sie sein müsste. Falls du deinen Beitrag in dem anderen Tread sehen möchtest, bitte ich dich, ihn nochmal zu posten. Mir ist nicht bekannt, dass einzelne Beiträge zwischen Threads verschoben werden könnten.


Anmelden zum Antworten