Forum: Compiler & IDEs UND operator in if - Anweisung funktioniert nicht


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von helpme91 (Gast)


Lesenswert?

Hallo,

ich möchte in einer if - Anweisung prüfen, ob ein int == 2 ist und ein 
bool == true.
Ich habe folgendes gemacht:
1
if (choise == 2 && executed == true)

Funktioniert leider nicht, er kennt das && nicht.

Wie geht das in C++?

Schöne Grüße.

: Verschoben durch Moderator
von Oliver S. (oliverso)


Lesenswert?

helpme91 schrieb:
> Funktioniert leider nicht, er kennt das && nicht.

Dann hast du keinen C++ - Compiler, sondern einen für irgend eine andere 
Programmiersprache,

Da das aber dann doch eher unwahrscheinlich ist, dürfte das Problem ein 
ganz anderes sein. Welches, könnte man aus dem ganzen Code und der 
ganzen Fehlermeldung erkennen, aber das bleibt halt wegen Geheimhaltung 
deinerseits dir überlassen.

Oliver

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Vielleicht meckert der Compiler auch die Variable "choise" an (falls du
sie in der Deklaration richtig geschrieben hast).

von Justin S. (derwer)


Lesenswert?

helpme91 schrieb:
> Funktioniert leider nicht, er kennt das && nicht.

Hier wäre der genaue Wortlaut der Fehlerausgabe wichtig. Mit Deiner 
Angabe kann man ziemlich genau gar nichts anfangen. Was soll das heißen 
"Funktioniert leider nicht"? Und wer ist "er"?

Beitrag #6668347 wurde von einem Moderator gelöscht.
von Sebastian S. (amateur)


Lesenswert?

Vielleicht hilft eine Überdosis an Klammern?
Also: if ( ( choise == 2 ) && ( executed == true ) )...
Vielleicht aber auch nicht.

von MaWin (Gast)


Lesenswert?

Sebastian S. schrieb:
> Vielleicht hilft eine Überdosis an Klammern

Ist egal, wenn kein Syntax Fehler vorliegt, zieht sich ein C(++) 
Compiler alles rein. ;-)

Dürfte - wie bereits erwähnt - eine Abweichung zu Deklaration sein.

von Sebastian S. (amateur)


Lesenswert?

@MaWin
Ich habe gerade keinen C++-Compiler installiert.
Mir war nur aufgefallen, dass verschiedene Datentypen verglichen werden.
Irgendwas Numerisches und irgendwas Logisches.

von Dr. Wunderlich (Gast)


Lesenswert?

Sebastian S. schrieb:
> Vielleicht hilft eine Überdosis an Klammern?
> Also: if ( ( choise == 2 ) && ( executed == true ) )...

Nö, == hat sowieso Vorrang vor logischen und bitweisen Operatoren. 
Ändert also nichts (ist höchstens eine Stilfrage). Das "== true" ist 
doppelt gemoppelt.

> Ich habe gerade keinen C++-Compiler installiert.

https://godbolt.org

von MaWin (Gast)


Lesenswert?

Sebastian S. schrieb:
> Mir war nur aufgefallen, dass verschiedene Datentypen verglichen werden.

???

helpme91 schrieb:
> int == 2 ist und ein
> bool == true

Wo ist das Problem? Beides ergibt bool und && hat die richtigen Typen.

???

von Wolfgang (Gast)


Lesenswert?

helpme91 schrieb:
> executed == true

Traust du dem Compiler nicht zu, "true" selbstständig als "true" zu 
erkennen, oder warum diese Verknüpfung?

von Oliver S. (oliverso)


Lesenswert?

Sebastian S. schrieb:
> Ich habe gerade keinen C++-Compiler installiert.

Warum auch, offensichtlich kennst du die Sprache ja nicht. Das ist nicht 
weiter schlimm, nur sind deine Antworten dazu deshalb wenig hilfreich.

Oliver

von helpme91 (Gast)


Lesenswert?

Mehrere Klammern funktionieren leider auch nicht.
Es gibt keine Fehlermeldung. Er compeliert alles einwandfrei.

von Johannes S. (jojos)


Lesenswert?

Na dann hat der Compiler sicher einen Fehler.

von Alexander S. (alesi)


Lesenswert?

helpme91 schrieb:
> er kennt das && nicht.

helpme91 schrieb:
> Es gibt keine Fehlermeldung. Er compeliert alles einwandfrei.

Du musst schon genauer beschreiben, was Du aussagen willst. Woraus 
schließt Du, dass er && nicht kennt?
Du solltest auch die ganze Routine, das erwartete Ergebnis und das 
ausgegebene Ergebnis mitteilen.

von Georg M. (g_m)


Lesenswert?

helpme91 schrieb:
> er kennt das && nicht.

Das kann man mit einem minimalen Testprogramm prüfen.

von Jockel (Gast)


Lesenswert?

@helpme91

Du brauchst Hilfe die es hier nicht gibt.

von helpme91 (Gast)


Lesenswert?

Ich habe den Fehler gefunden, danke für die Hilfe.

Ich habe beim bool aus versehen beim initialisieren execute == true 
statt execute = true gemacht.

von Johannes S. (jojos)


Lesenswert?

also sehr wahrscheinlich Compiler Warnungen ignoriert. Die kann man 
sogar in der Arduino IDE einschalten.

von Arduino Fanboy D. (ufuf)


Lesenswert?

helpme91 schrieb:
> Ich habe beim bool aus versehen beim initialisieren execute == true
> statt execute = true gemacht.

Tipp, Initialisierungen nur so machen:
> bool execute {true};

Das mildert Verwirrungen mit dem mehrfach überladenen = Zeichen.
Bringt mehr Typsicherheit, durch weniger überraschende implizite 
Konvertierungen.
1
bool execute2 = 42; // geht ohne murren durch!
2
bool execute1 {42}; // warning: narrowing conversion of '42' from 'int' to 'bool'

von Rolf M. (rmagnus)


Lesenswert?

Johannes S. schrieb:
> also sehr wahrscheinlich Compiler Warnungen ignoriert. Die kann man
> sogar in der Arduino IDE einschalten.

Die muss man allerdings auch explizit einschalten, weil das Ding per 
Default alles komplett verheimlicht. Man kann ja schon froh sein, dass 
das Ding wenigstens bei Fehlern was ausgibt. Gerade die Haupt-Zielgruppe 
würde von mehr Warnungen besonders profitieren.

von Roland F. (rhf)


Lesenswert?

Hallo,
Rolf M. schrieb:
> Gerade die Haupt-Zielgruppe würde von mehr Warnungen besonders
> profitieren.

Ich behaupte mal (ohne Beweis) das gerade die Haupt-Zielgruppe mit den 
Compilerwarnungen wenig bis nichts anfangen kann.

rhf

von Oliver S. (oliverso)


Lesenswert?

Arduino Fanboy D. schrieb:
> Tipp, Initialisierungen nur so machen:
>> bool execute {true};

Ist in dem Fall egal.
1
 bool execute == true;
kompiliert eh nicht. Also war das auch nicht der Fehler.

Eine fehlerhafte „Zuweisung“
1
 execute == true;

kompiliert, und erzeugt die Warnung „statement has no effect“

Oliver

: Bearbeitet durch User
von Arduino Fanboy D. (ufuf)


Lesenswert?

Rolf M. schrieb:
> muss

Wozu das Geschimpfe!

Beim ersten Fehler, und der kommt, wird einem gesagt, dass man doch 
bitte die ausführlichen Ausgaben aktivieren soll, damit eben die 
Meldungen ausführlicher werden.

Ich denke, dass dem folge zu leisten, so ziemlich jedem möglich ist.
Das Feature ist also keinesfalls "verborgen" oder "verheimlicht", 
sondern wird sogar propagiert.

Rolf M. schrieb:
> Gerade die Haupt-Zielgruppe
> würde von mehr Warnungen besonders profitieren.

Die Zielgruppe für deine Ansage, ist (hier) auch nicht sonderlich gut 
gewählt....
Die Defaulteinstellungen der IDE könntest sogar du auf Github ändern.
Dort ist dann auch der richtige (Ziel)Personenkreis zu finden.

von Johannes S. (jojos)


Lesenswert?

Arduino Fanboy D. schrieb:
> Das Feature ist also keinesfalls "verborgen" oder "verheimlicht",

es ging nicht darum das das Feature verborgen ist, das ist einfach in 
dem überschaubaren Einstellungsdialog zu finden, sondern um die 
Warnungen selber. Man möchte eher den Anwender, der seinen Code nur 
kopiert, nicht mit unverständlichen Meldungen verwirren.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Oliver S. schrieb:
> Ist in dem Fall egal.

Natürlich darfst du versuchen meine allgemeine Empfehlung zu 
Initialisierungen durch ein "egal" zu negieren.

Und nein, zum Code des TO sage ich nichts, da er in Schatten liegt.

von Rolf M. (rmagnus)


Lesenswert?

Arduino Fanboy D. schrieb:
> Rolf M. schrieb:
>> muss
>
> Wozu das Geschimpfe!

Weil ich es ziemlich daneben finde, als Voreinstellung alle Warnungen 
auszuknipsen. Hier ist man sich doch eigentlich weitgehend einig, dass 
Warnungen eingeschaltet gehören und man sie auch beachtet und nicht 
ignoriert. Diese Voreinstellung ist das genaue Gegenteil davon.

> Beim ersten Fehler, und der kommt, wird einem gesagt, dass man doch
> bitte die ausführlichen Ausgaben aktivieren soll, damit eben die
> Meldungen ausführlicher werden.

Warum sind sie dann nicht gleich an?

> Die Zielgruppe für deine Ansage, ist (hier) auch nicht sonderlich gut
> gewählt....
> Die Defaulteinstellungen der IDE könntest sogar du auf Github ändern.
> Dort ist dann auch der richtige (Ziel)Personenkreis zu finden.

Die Arduino-IDE finde ich ziemlich grottig, nicht nur deswegen, und ich 
benutze sie nicht. Daher muss die für mich nicht verbessert werden. Ich 
kann ja trotzdem meine Meinung zu den Entscheidungen, die dort 
eingeflossen sind, kund tun.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Rolf M. schrieb:
> Ich
> kann ja trotzdem meine Meinung zu den Entscheidungen, die dort
> eingeflossen sind, kund tun.

Natürlich kannst du das tun!
Aber dir ist schon klar, dass das genau das Verhalten eines Arduino 
Bashers ist?

Wenn ich einen Arduino Basher typisieren müsste:
1. ER nutzt die IDE nicht
2. ER will das auch gar nicht
3. ER beschwert sich über Dinge, mit denen er gar nichts zu tun hat.
Die Motivation kann also gar nicht darin liegen die Welt zu verbessern.


Rolf M. schrieb:
> Daher muss die für mich nicht verbessert werden.
Siehste.
Einfach nur schlecht reden.....



Johannes S. schrieb:
> Man möchte eher den Anwender, der seinen Code nur
> kopiert, nicht mit unverständlichen Meldungen verwirren.
Ich rate dir mit dem "Personenkreis" zu sprechen, und nicht Absichten zu 
unterstellen.

Es ist eine Kleinigkeit, das einzustellen, wie man das selber möchte.
Und die Einsicht das zu tun, ist nur eine einzige Einsicht, von vielen 
Tausenden, welche auf einen zukommen, wenn man das Gebiet µC 
Programmierung betritt.

: Bearbeitet durch User
von Johannes S. (jojos)


Lesenswert?

Arduino Fanboy D. schrieb:
> Ich rate dir mit dem "Personenkreis" zu sprechen, und nicht Absichten zu
> unterstellen.

habe ich, und auch aus eigener Erfahrung weiß ich das die 
Fehler/Warnungen nicht immer leicht zu interpretieren sind. Trotzdem 
halte ich es für falsch, die Warnungen als Voreinstellung zu 
unterdrücken. Das hat nix mit Bashing zu tun. Du fühlst dich immer etwas 
zu schnell angegriffen wenn es um Arduino geht.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Johannes S. schrieb:
> Trotzdem
> halte ich es für falsch, die Warnungen als Voreinstellung zu
> unterdrücken.
Der Satz enthält eine ungerechte Wertung!
Eine Realitätsverzerrung.
Die Meldungen werden nicht unterdrückt.

Die AVR-Gcc Tool Chain meldet von Hause aus keine/kaum Warnungen.
Man muss die Warnungen "scharf schalten" wenn man sie sehen will.

Folge ich deinem Urteil/Bewertung, dann soll für die Arduino IDE etwas 
gelten, was für die Toolchain nicht gilt!


Als wenn die Arduino User damit überfordert wären, die Haken zu 
setzen....
Und ja, das ordne ich als Bashing ein.
Noch auf niedrigem Niveau, aber doch schon eine Startmenge.

von Johannes S. (jojos)


Lesenswert?

als Einsteiger erwartet man sinnvolle Voreinstellungen in der IDE, das 
hat nix damit zu tun das ein Anfänger den Dialog nicht bedienen könnte. 
Eine IDE versteckt ja sogar die ganzen Compileroptionen weil man damit 
erstmal noch weniger zu tun haben möchte.
Und wenn man auch gerade noch mit C/C++ anfängt, dann sind unterdrückte, 
potentielle Fehler keine Hilfe. Siehe das Problem des TO. Mit den 
unterdrückten Warnungen wird man gleich zur Schluderei erzogen. 
Spätestens wenn man mit Zeigern anfängt rächt sich das richtig.

: Bearbeitet durch User
von Arduino Fanboy D. (ufuf)


Lesenswert?

Johannes S. schrieb:
> unterdrückte

Johannes S. schrieb:
> unterdrückten

Semantik: Unterdrücken ist eine aktive Handlung.
Das trifft hier nicht zu!



Johannes S. schrieb:
> als Einsteiger erwartet man sinnvolle Voreinstellungen in der IDE,
Sorry, aber ich sehe dich nicht als Arduino Einsteiger.
Zudem hat ein Makefile Einsteiger exakt das gleiche Problem.
Dem wird auch nicht der Hindern alle 5 Minuten abgewischt.


Man, man ....
Natürlich sind bei mir auch alle Meldungen aktiviert, IMMER!
Auch pedantic.
Aber doch nur, weil mir Himbeereis gut schmeckt, muss ich das doch nicht 
als Dessert Grundvorgabe weltweit allen Arduino Usern aufdrücken.

Johannes S. schrieb:
> Mit den
> unterdrückten Warnungen wird man gleich zur Schluderei erzogen.
Is klar....

Johannes S. schrieb:
> Spätestens wenn man mit Zeigern anfängt rächt sich das richtig.
Als wenn der Kompiler alle Schlampereien mit Zeigern erkennen könnte....

Jetzt mal rein psychologisch:
Wann setzt sich eine Erkenntnis fester, wenn sie per Voreinstellung 
vorweg genommen wurde, oder wenn einem die Wichtigkeit der Meldungen ins 
Hirn tropft und man diese Einstellung dann selber durchführt?

Weiterhin:
Ich stimme euch zu, wenn ihr meint, Warnungen helfen saubere Programme 
zu schreiben.

Sehe aber auch, dass das schreiben von "sauberen" Programmen 
hauptsächlich im Kopf stattfindet. Jede gewonnene Erkenntnis ist da mehr 
wert, als so ein blöder Klick-haken-Menüeintrag.


Aber ich kann auch deine Argumentation (ver)wenden....
Wenn die Warnungen von vorneherein aufs schärfste eingestellt sind, wird 
der Unbedarfte zum aktiven ignorieren der Warnungen erzogen. Denn das 
Programm läuft ja trotzdem (vielleicht).
Dadurch verlieren die Warnungen ihre Wichtigkeit.

von A. S. (achs)


Lesenswert?

Arduino Fanboy D. schrieb:
> Beim ersten Fehler, und der kommt, wird einem gesagt, dass man doch
> bitte die ausführlichen Ausgaben aktivieren soll, damit eben die
> Meldungen ausführlicher werden.
Der Fehler kommt bei Fehlern. Wenn die aber offensichtlich und (wie beim 
TO) beseitigt sind, wieso sollte er dann Warnungen einschalten?

Vielleicht sind Warnungen ein so wichtiges Thema, dass man über einen 
eigenen "Analyse"-button nachdenken sollte, bei dem halt sämtliche 
Warnungen ausgegeben werden. Gerne auch gestuft (einmal drücken nur die 
wichtigsten, 4 x dann auch die abwegigsten Vermutungen).

Oder zumindest 2 einstellbare Level, so dass der (zusammenkopierte) Code 
0 bzw wenige Warnungen enthält und in Analyse ~ 10 in jedem Modul.

Bei der Arbeit, mit mehreren 100kloc machen wir das genau so.

von Oliver S. (oliverso)


Lesenswert?

A. S. schrieb:
> Bei der Arbeit, mit mehreren 100kloc machen wir das genau so.

Ändert ihr da andauernd alle 100k Zeilen auf einmal?

Bei den bei hier eher anzutreffenden Programmgrößen zu den eher kleinen 
Mikrocontrollern gibt es grundsätzlich nur eins: Warnungen an.
Beim gcc als Grundeinstellung -Wall -Wextra -pedantic, und nur wer genau 
weiß warum, darf letzteres weglassen. Wer es braucht, dazu -Werror, 
zumindest für Release builds. Dazu dann je nach persönlichem Empfinden 
noch ein paar weitere.

Oliver

von A. S. (achs)


Lesenswert?

Oliver S. schrieb:
> Ändert ihr da andauernd alle 100k Zeilen auf einmal?
>
> Bei den bei hier eher anzutreffenden Programmgrößen zu den eher kleinen
> Mikrocontrollern gibt es grundsätzlich nur eins: Warnungen an.

Dann habe ich mich falsch ausgedrückt:

Wenn es 2 Level gibt (Kompilieren, Analysieren), dann sollte der zum 
Kompilieren nur wenige Warnungen produzieren. Für den einen (mit 
zusammenkopiertem Code) ist das vielleicht alle Warnungen aus (weil viel 
Müll übernommen wurde), für den anderen vielleicht -pedantic.

Und fürs Analysieren sollte dann entsprechend schärfer geschaltet sein.

Aber als 2 parallele Sets, bzw. als ein Set mit Level (1=immer, 2=nur 
beim Analysieren)

(Und natürlich dient Refactoring auch dazu, die Warnlevel stetig höher 
setzen zu können)

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

Arduino Fanboy D. schrieb:
> Rolf M. schrieb:
>> Ich
>> kann ja trotzdem meine Meinung zu den Entscheidungen, die dort
>> eingeflossen sind, kund tun.
>
> Natürlich kannst du das tun!
> Aber dir ist schon klar, dass das genau das Verhalten eines Arduino
> Bashers ist?

Das trifft sich ja, denn ich finde, dass dein Name sehr gut passt. Dein 
Verhalten erinnert mich an das eines Fanboys. ;-)

> Wenn ich einen Arduino Basher typisieren müsste:
> 1. ER nutzt die IDE nicht
> 2. ER will das auch gar nicht

Ich habe sie ausprobiert und für mich als untauglich befunden. Wenn 
andere damit glücklich sind, habe ich aber kein Problem damit.

> 3. ER beschwert sich über Dinge, mit denen er gar nichts zu tun hat.

Ich habe hier lediglich einen der Gründe für meine Ablehnung genannt, 
weil das Thema gerade aufgekommen ist und der TE genau deswegen unnötig 
viel Zeit gebraucht hat, um sein Problem zu finden.

> Die Motivation kann also gar nicht darin liegen die Welt zu verbessern.

Vielleicht ist es dir noch nicht aufgefallen, aber nicht jede Aussage, 
die Menschen treffen, dient der Weltverbesserung.

> Rolf M. schrieb:
>> Daher muss die für mich nicht verbessert werden.
> Siehste.
> Einfach nur schlecht reden.....

Dafür nimmst du gleich eine Verteidigungshaltung ein und greifst die 
Person selbst an, die was schlechtes über dein geliebtes Tool 
geschrieben hat. Das ist typisches Fanboy-Verhalten.

> Es ist eine Kleinigkeit, das einzustellen, wie man das selber möchte.
> Und die Einsicht das zu tun, ist nur eine einzige Einsicht, von vielen
> Tausenden, welche auf einen zukommen, wenn man das Gebiet µC
> Programmierung betritt.

Mir ist eben nur ein Rätsel, weshalb man gerade bei einer Software, die 
so einsteigerfreundlich wie möglich sein soll, diese Einsicht erst 
voraussetzt, statt es gleich so voreinzustellen, dass man von Anfang an 
schon daran gewöhnt ist, dass sich der Compiler bei potenziellen 
Problemen von sich aus meldet.

Arduino Fanboy D. schrieb:
> Semantik: Unterdrücken ist eine aktive Handlung.
> Das trifft hier nicht zu!

Die Entscheidung, das Häkchen in der Voreinstellung nicht zu setzen, 
wurde sicherlich aktiv getroffen. Oder denkst du, jemand hat das einfach 
vergessen?

> Johannes S. schrieb:
>> als Einsteiger erwartet man sinnvolle Voreinstellungen in der IDE,
> Sorry, aber ich sehe dich nicht als Arduino Einsteiger.
> Zudem hat ein Makefile Einsteiger exakt das gleiche Problem.
> Dem wird auch nicht der Hindern alle 5 Minuten abgewischt.

Nur hat sich Arduino halt explizit als Hauptziel eine besonders einfache 
Nutzbarkeit auf die Fahne geschrieben. Von einem Anfänger zu erwarten, 
dass er erstmal Sachen umkonfiguriert, passt da überhaupt nicht dazu. 
Gerade Anfänger fassen lieber erst mal keine Einstellung an, um nicht 
versehentlich was kaputtzumachen.

> Man, man ....
> Natürlich sind bei mir auch alle Meldungen aktiviert, IMMER!
> Auch pedantic.
> Aber doch nur, weil mir Himbeereis gut schmeckt, muss ich das doch nicht
> als Dessert Grundvorgabe weltweit allen Arduino Usern aufdrücken.

Huch? Wieso "weltweit allen Arduino Usern aufdrücken"? Es geht nur 
darum, dass das Häkchen per Voreinstellung an sein sollte. Wer das nicht 
will, kann es dann immer noch ausschalten. Aber wenn es per Default aus 
ist, weiß der Anfänger gar nicht, was er verpasst. Das ist ungefähr so, 
als ob deine Eisdiele Himbeereis gar nicht offiziell anbietet und dir 
nur auf explizite Nachfrage verkauft. Wenn du es kennst und weißt, dass 
du es magst, fragst du, ob sie das auch haben, sonst halt nicht.

> Johannes S. schrieb:
>> Mit den
>> unterdrückten Warnungen wird man gleich zur Schluderei erzogen.
> Is klar....

Ja, wird man. Versuche einfach mal, dich in die Rolle des Anfängers, der 
von dem Thema noch keine Ahnung hat, zu versetzen. Ich weiß, das fällt 
irgendwann schwer, wenn man selbst viel Erfahrung und Knoff Hoff hat. Da 
empfindet man Dinge als trivial, die für den Anfänger eine riesige Hürde 
darstellen.

> Johannes S. schrieb:
>> Spätestens wenn man mit Zeigern anfängt rächt sich das richtig.
> Als wenn der Kompiler alle Schlampereien mit Zeigern erkennen könnte....

Dass er nicht alle erdenklichen Probleme erkennen und melden kann, ist 
keine Rechtfertigung dafür, das abzuschalten, was er hätte melden 
können.

A. S. schrieb:
> Vielleicht sind Warnungen ein so wichtiges Thema, dass man über einen
> eigenen "Analyse"-button nachdenken sollte, bei dem halt sämtliche
> Warnungen ausgegeben werden. Gerne auch gestuft (einmal drücken nur die
> wichtigsten, 4 x dann auch die abwegigsten Vermutungen).

Oder möglicherweise eine Statuszeile, die sagt "Es gibt Warnungen. 
Möchtest du sie sehen?".

von Nop (Gast)


Lesenswert?

A. S. schrieb:
> Wenn es 2 Level gibt (Kompilieren, Analysieren), dann sollte der zum
> Kompilieren nur wenige Warnungen produzieren.

Dann verbringt man mehr Zeit mit Debuggen, weil man manuell Fehler jagt, 
auf die einen der Compiler auch deutlich effizienter und automatisch 
hätte hinweisen können. Deswegen ergibt es keinen Sinn, überhaupt mit 
geringem Warnlevel zu arbeiten.

Arduino Fanboy D. schrieb:
> Johannes S. schrieb:
>> Mit den
>> unterdrückten Warnungen wird man gleich zur Schluderei erzogen.
> Is klar....

Isso. Wenn Du erstmal eine Codebasis jenseits eines Blinkys hast, die 
ohne Warnungen erstellt wurde, und dann erst Warnungen aktivierst, haut 
es Dich um. Das ist auch logisch, weil man mit Warnungen nämlich direkt 
hätte lernen können, anstatt weiterhin noch mehr bedenklichen Code zu 
schreiben.

> Wenn die Warnungen von vorneherein aufs schärfste eingestellt sind, wird
> der Unbedarfte zum aktiven ignorieren der Warnungen erzogen.

Wenn man sie gar nicht erst einschaltet, werden sie erst recht nicht zur 
Kenntnis genommen - wie auch, weil sie ja nichtmal angezeigt werden.

von Dussel (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> 3. ER beschwert sich über Dinge, mit denen er gar nichts zu tun hat.
> Die Motivation kann also gar nicht darin liegen die Welt zu verbessern.
Die Schlussforlgerung ist unlogisch. Man kann auch etwas kritisieren, 
von dem man nicht betroffen ist. Man kann auch als Weißer gegen 
Rassismus sein. Man kann auch als Frau gegen Sexismus sein. Und die 
meisten, die Vorschläge für die Verbesserung von Bobby Cars oder 
Babybrei machen, nutzen sie wahrscheinlich nicht selber für sich (in 
gedachter Weise).

Arduino Fanboy D. schrieb:
> Wenn die Warnungen von vorneherein aufs schärfste eingestellt sind, wird
> der Unbedarfte zum aktiven ignorieren der Warnungen erzogen. Denn das
> Programm läuft ja trotzdem (vielleicht).
Erstens stimmt das nicht, ich hatte früher auch Warnungen eingestellt 
und ignoriere sie trotzdem nicht und zweitens ist jemand, der Warnungen 
aktiv ignoriert zum Hauptteil selber Schuld. Wer die Warnungen aber gar 
nicht erst bekommt, kann sie nicht ignorieren.
Da finde ich, halt Rolf schon Recht. Gerade für Anfänger in einem 
Programm, das sich an Anfänger richtet, sollten Hilfen erstmal 
eingeschaltet sein.

von Oliver S. (oliverso)


Lesenswert?

Nop schrieb:
> Isso. Wenn Du erstmal eine Codebasis jenseits eines Blinkys hast, die
> ohne Warnungen erstellt wurde, und dann erst Warnungen aktivierst, haut
> es Dich um.

Wenn man das irgendwie etwas ernsthafter auf nur einer PLattform 
betreibt, sollte das nicht passieren. Da gehts eher darum, 
Flüchtigkeitsfehler abzufangen.

Lustiger wird es, wen man Code für verschiedene Plattformen und Compiler 
schreibt. MSVC, gcc, und Clang haben schon unterschiedliche 
Vorstellungen davon, vor was gewarnt werden sollte.

Oliver

von A. S. (achs)


Lesenswert?

Nop schrieb:
> Dann verbringt man mehr Zeit mit Debuggen, weil man manuell Fehler jagt,
> auf die einen der Compiler auch deutlich effizienter und automatisch
> hätte hinweisen können. Deswegen ergibt es keinen Sinn, überhaupt mit
> geringem Warnlevel zu arbeiten.

Das sehe ich anders: Kaum jemand hat alle Warnungen an. Und kaum jemand 
möchte die 30 Leichen, die zwar erwiesen ungefährlich aber in seinem 
Code noch sind, jedesmal auf die Nase gebunden bekommen, wenn sich eine 
zentrale Header ändert oder ein Rebuild-All ansteht.

Es kann ja auch objektiv nicht sein, dass statt Alle Warnungen Aus 
(default) jetzt Alle Ein die Lösung ist.

von Harry L. (mysth)


Lesenswert?

A. S. schrieb:
> Und kaum jemand
> möchte die 30 Leichen, die zwar erwiesen ungefährlich aber in seinem
> Code noch sind, jedesmal auf die Nase gebunden bekommen

Dann investiert man einmal ne Stunde Arbeit, und die Probleme sind ein 
für alle mal vom Tisch.

Ich bin sicherlich kein Programmier-Anfänger, aber Warungen schalte ich 
immer ALLE ein, und ich kümmer mich auch um jede einzelne Warnung.

Sehr häufig hab ich so problematische Konstrukte identifizieren können, 
die ansonsten zu potentiellen Problemen bei der Wiederverwendung des 
Code hätten führen können.
Das kann nervig sein, aber hat sich bei mir sehr bewährt.

Ich erwarte am Ende eine Meldung wie diese:
1
22:45:54 Build Finished. 0 errors, 0 warnings. (took 16s.293ms)

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

A. S. schrieb:

> Das sehe ich anders: Kaum jemand hat alle Warnungen an.

Jeder, der Interesse an fehlerarmer Software hat, hat alle Warnungen an.

> Und kaum jemand
> möchte die 30 Leichen, die zwar erwiesen ungefährlich aber in seinem
> Code noch sind

Wieso sind die im Code noch drin? Wieso wurden die nicht gleich gefixt? 
Das ist genau der Punkt - die behebt man, damit man nicht inmitten von 
Dutzenden "harmlosen" Warnungen die eine übersieht, die nicht harmlos 
ist.

> Es kann ja auch objektiv nicht sein, dass statt Alle Warnungen Aus
> (default) jetzt Alle Ein die Lösung ist.

Doch, genau das kann nicht nur sein, es sollte auch. Zusammen mit 
-Werror. Code, der dann nicht mehr durchcompiliert, ist einfach 
schlechter und bugträchtiger Code.

von A. S. (achs)


Lesenswert?

Nop schrieb:
> Wieso sind die im Code noch drin? Wieso wurden die nicht gleich gefixt?

So wie Du schreibst sind entweder deine Projekte klein, beinhalten nur 
selbstgeschriebenen Code, du kennst noch nicht alle Warnoptionen oder 
der Compiler hat nur die mindest-Warnungen, so etwa -pedantic.

von Harry L. (mysth)


Lesenswert?

Nach meiner Erfahrung ist die Anzahl der Warnungen mit "-Wall" meist 
umgekehrt proportional zur Code-Qualität...

: Bearbeitet durch User
von Nop (Gast)


Lesenswert?

A. S. schrieb:

> So wie Du schreibst sind entweder deine Projekte klein

Nein.

> beinhalten nur selbstgeschriebenen Code

Nein.

> du kennst noch nicht alle Warnoptionen oder
> der Compiler hat nur die mindest-Warnungen, so etwa -pedantic.

Auch nein.

Es liegt bloß daran, daß ich eine ganz faule Sau bin und deswegen keinen 
Bock habe, manuell irgendwelchen Fehlern nachzujagen, auf die der 
Compiler mich auch automatisch hätte hinweisen können.

von Oliver S. (oliverso)


Lesenswert?

A. S. schrieb:
> Das sehe ich anders: Kaum jemand hat alle Warnungen an. Und kaum jemand
> möchte die 30 Leichen, die zwar erwiesen ungefährlich aber in seinem
> Code noch sind, jedesmal auf die Nase gebunden bekommen, wenn sich eine
> zentrale Header ändert oder ein Rebuild-All ansteht.

Es gibt keine ungefährlichen Warnungen.

Oliver

von Dirk B. (dirkb2)


Lesenswert?

Oliver S. schrieb:
> Es gibt keine ungefährlichen Warnungen.

„Variable defined, but never used“

von Johannes S. (jojos)


Lesenswert?

Dirk B. schrieb:
> „Variable defined, but never used“

Kann harmlos sein, muss aber nicht.
Vielleicht wollte man diese Variable benutzen, hat durch den 
Kopierfehlerteufel aber eine andere weiterbenutzt. Für jemanden, der 
fremden Code analysiert nicht schön. Auch hier ist es Faulheit das nicht 
eindeutig zu machen.

von Harry L. (mysth)


Lesenswert?

Johannes S. schrieb:
> Dirk B. schrieb:
>> „Variable defined, but never used“
>
> Kann harmlos sein, muss aber nicht.
> Vielleicht wollte man diese Variable benutzen, hat durch den
> Kopierfehlerteufel aber eine andere weiterbenutzt. Für jemanden, der
> fremden Code analysiert nicht schön. Auch hier ist es Faulheit das nicht
> eindeutig zu machen.

dabei hilft mir dieses Makro:
1
#define UNUSED(X) (void)X      /* To avoid gcc/g++ warnings */

und in den Funktionen dann ein
1
UNUSED(var);

Wenn man genau weis, daß die Variable nicht genutzt wird, kann man so 
die Warnung unterdrücken.

Das ist z.B. bei __weak definierten Funktionen manchmal sinnvoll.

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Harry L. schrieb:
> #define UNUSED(X) (void)X

Bei Makros immer Klammern! Man weiss nie, wer es benutzt. ;-)

#define UNUSED(X) ((void)(X))

Du kannst dir sonst die nächsten Fehler casten. :-<<<

von Nop (Gast)


Lesenswert?

Oliver S. schrieb:

> Es gibt keine ungefährlichen Warnungen.

Exakt. Kann mir doch keiner erzählen, daß er inmitten von zig 
"ungefährlichen" Warnungen einer räudigen Codebasis die paar noch sieht, 
die auf tatsächliche Bugs verweisen.

von Harry L. (mysth)


Lesenswert?

MaWin schrieb:
> Harry L. schrieb:
>> #define UNUSED(X) (void)X
>
> Bei Makros immer Klammern! Man weiss nie, wer es benutzt. ;-)
>
> #define UNUSED(X) ((void)(X))
>
> Du kannst dir sonst die nächsten Fehler casten. :-<<<

Grundsätzlich ja richtig, aber welcher Honk würde so ein Makro innerhalb 
eines andere Statement verwenden?

Der Name ist hier doch Programm...

: Bearbeitet durch User
von A. S. (achs)


Lesenswert?

Nop schrieb:
> Exakt. Kann mir doch keiner erzählen, daß er inmitten von zig
> "ungefährlichen" Warnungen einer räudigen Codebasis die paar noch sieht,
> die auf tatsächliche Bugs verweisen.

Und Du kannst mir nicht erzählen, dass Du alle Warnungen (jenseits Wall) 
an hast und trotzdem ohne Vodoo programmierst.

Einfaches Beispiel: Du implementierst eine abgesprochene Funktion void 
a(int b, int c).

Für c gibt es noch keine Verwendung. Jede Unterdrückung der Warnung 
erfordert, dass Du diese Warnung an anderer Stelle (in deiner 
To-do-Liste, als Ticket) pflegst.

von Oliver S. (oliverso)


Lesenswert?

Je nun, wenn denn c irgendwann doch mal gebraucht wird, muß da jemand 
dran, und der wird dann das, was du zur Unterdrückung der Warnung in der 
ersten Zeile der Funktion oder in der Parameterliste als Kommentar und 
in der Doku dazu geschrieben hast, finden.

Denn c kommentarlos einfach so unbenutzt zu lassen wäre …

Oliver

von Nop (Gast)


Lesenswert?

A. S. schrieb:

> Und Du kannst mir nicht erzählen, dass Du alle Warnungen (jenseits Wall)
> an hast und trotzdem ohne Vodoo programmierst.

Isso.

> Für c gibt es noch keine Verwendung. Jede Unterdrückung der Warnung
> erfordert, dass Du diese Warnung an anderer Stelle (in deiner
> To-do-Liste, als Ticket) pflegst.

Da wird c direkt als erstes in der Funktion nach void gecasted und mit 
einem Kommentar versehen. Wenn man c dann implementiert, sieht man den 
Kommentar doch. Gut, außer man hat Funktionen von 2000 Zeilen Länge und 
will c dann erstmals gegen Ende benutzen, aber dann hat man schon ganz 
andere Probleme.

Kann man auch mit einem TODO versehen, danach grept man ja ohnehin die 
Codebasis.

von Johannes S. (jojos)


Lesenswert?

'unused' ist sowieso ein langes Kapitel, dafür gibt es ja sogar ein 
Attribut im Sprachstandard:
1
[[maybe_unused]]
In C++ ab C++17, aber der gcc meckert auch nicht wenn man es mit g++14 
benutzt.
Also zwei eckige Klammern, die Forensoftware interpretiert das als Link.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

In dem Fall wäre aber ein
1
void foo(int a, int b, int /* c */){

und ein Kommentar dazu an passender Stelle deutlicher.

Oliver

von Harry L. (mysth)


Lesenswert?

Oliver S. schrieb:
> In dem Fall wäre aber ein
>
1
void foo(int a, int b, int /* c */){
>
> und ein Kommentar dazu an passender Stelle deutlicher.

das ist noch deutlicher:
1
#define UNUSED(X) (void)X      /* To avoid gcc/g++ warnings */
2
3
void foo(int a, int b, int c){
4
  UNUSED(c);
5
  ...
6
  ...
7
}

von Rolf M. (rmagnus)


Lesenswert?

A. S. schrieb:
> Einfaches Beispiel: Du implementierst eine abgesprochene Funktion void
> a(int b, int c).
>
> Für c gibt es noch keine Verwendung. Jede Unterdrückung der Warnung
> erfordert, dass Du diese Warnung an anderer Stelle (in deiner
> To-do-Liste, als Ticket) pflegst.

Der typische Weg ist, an den Anfang der Funktion ein (void)c; zu 
schreiben, gegebenenfalls hinter einen Makro UNUSED_PARAMTER() oder so 
versteckt. Alternativ kann man bei gcc auch __attribute__((unused)) 
verwenden.

Oliver S. schrieb:
> In dem Fall wäre aber ein
> void foo(int a, int b, int /* c */){
>
> und ein Kommentar dazu an passender Stelle deutlicher.

Geht in C++, allerdings leider nicht in C. Damit habe ich dort 
regelmäßig zu tun, wenn ich z.B. irgendwelche Callbacks implementiere, 
die irgendwas übergeben bekommen, das ich halt einfach nicht brauche. 
Die sind halt so vorgegeben, und ich kann sie nicht ändern. Da nervt es 
mich jedesmal, dass man nicht wie in C++ einfach den Namen weglassen 
kann.

A. S. schrieb:
> Nop schrieb:
>> Exakt. Kann mir doch keiner erzählen, daß er inmitten von zig
>> "ungefährlichen" Warnungen einer räudigen Codebasis die paar noch sieht,
>> die auf tatsächliche Bugs verweisen.
>
> Und Du kannst mir nicht erzählen, dass Du alle Warnungen (jenseits Wall)
> an hast und trotzdem ohne Vodoo programmierst.

Das ist der Punkt, den ich schon vorher erwähnen wollte. -Wall schaltet 
nämlich mitnichten alle Warnungen ein, auch nicht in Kombination mit 
-Wextra -pedantic. Ich will mir gar nicht ausmalen, wo der überall 
warnt, wenn man wie hier gefordert wirklich alles einschaltet und dann 
womöglich noch mit -Werror. Hier mal ein paar Beispiele, was das 
beinhalten würde:

-Wdouble-promotion
Give a warning when a value of type float is implicitly promoted to 
double.

-Wunsafe-loop-optimizations
Warn if the loop cannot be optimized because the compiler cannot assume 
anything on the bounds of the loop indices.

-Wdate-time
Warn when macros _TIME_, _DATE__ or __TIMESTAMP_ are encountered as 
they might prevent bit-wise-identical reproducible compilations.

-Waggregate-return
Warn if any functions that return structures or unions are defined or 
called.

-Wpadded
Warn if padding is included in a structure, either to align an element 
of the structure or to align the whole structure.

-Wlong-long
Warn if long long type is used.

… und so weiter. Keine davon deutet auf einen Fehler im Code hin.

: Bearbeitet durch User
von Oliver S. (oliverso)


Lesenswert?

Rolf M. schrieb:
> Das ist der Punkt, den ich schon vorher erwähnen wollte. -Wall schaltet
> nämlich mitnichten alle Warnungen ein, auch nicht in Kombination mit
> -Wextra -pedantic.

Die Kombination ist aber zumindest (inzwischen) frei von false 
Positives.
Die allermeisten weiteren Warnungen, dieses da noch so gibt, sind halt 
anwendungsabhängig einzusetzen, oder halt nur zur Analyse einzuschalten.

Oliver

von A. S. (achs)


Lesenswert?

Oliver S. schrieb:
> halt nur zur Analyse einzuschalten.

Äh, ... genau darum ging es doch:

A. S. schrieb:
> dass man über einen eigenen "Analyse"-button nachdenken sollte,
> bei dem halt sämtliche Warnungen ausgegeben werden.

A. S. schrieb:
> Oder zumindest 2 einstellbare Level, so dass der (zusammenkopierte) Code
> 0 bzw wenige Warnungen enthält und in Analyse ~ 10 in jedem Modul.

Worauf dann 2 Leute meinte, dass sei Unsinn, weil man ja sowieso immer 
alle Warnungen an haben müsse.

von Johannes S. (jojos)


Angehängte Dateien:

Lesenswert?

'alle' Arduino Warnungen. So einfach wie ein Häkchen für alle ist es ja 
bei Arduino auch nicht, da muss man sich schon entscheiden. Jetzt ist 
natürlich die Preisfrage was ist ein bisschen Warnung, Standard oder 
Alles?
Auf jeden Fall scheint bei vielen Usern hier die Einstellung 'pedantic' 
zu sein. Wie auch immer ich das jetzt meine...

: Bearbeitet durch User
von Arduino Fanboy D. (ufuf)


Lesenswert?

A. S. schrieb:
> Worauf dann 2 Leute meinte, dass sei Unsinn, weil man ja sowieso immer
> alle Warnungen an haben müsse.

Es ist noch viel schlimmer....

Die Leute hier agieren auf Kompetenzlevel 3 und 4
3: bewusste Kompetenz
4: unbewusste Kompetenz

Wollen aber, dass Arduinoanfänger, welche meist/oft auf Kompetenzlevel 1 
starten, Meldungen zu sehen bekommen, ja sie gar damit zudröhnen, obwohl 
diese sie gar nicht verstehen können
1: unbewusste Inkompetenz

Dabei ist doch klar, dass man man mindestens Level 2 erreicht haben 
muss, um sich überhaupt dafür interessieren zu können (ohne in der tiefe 
zu verstehen)
2: bewusste Inkompetenz

Noch mal zum mit meißeln:
1: weiß von nix, weiß nicht, was er alles noch nicht weiß
2: weiß, das er nix weiß, will aber lernen
3: hat schon viel gelernt, muss aber (noch) bewusst agieren
4: ist so weit trainiert, dass vieles automatisch abläuft


Klarer:
Um die Warnungen analysieren zu können, und erst dann entfalten sie 
ihren Sinn, ist es erforderlich, sich mindestens auf dem Weg von 2 zu 
Kompetenzlevel 3 zu befinden.

Das werfe ich dem Rolf M. (rmagnus) vor!
Er agiert auf Level 3 oder 4 aber will seine Doktrin auf Level 1 
ausdehnen. Dabei hat er den Zustand schon vor Jahrzehnten(?) verlassen.
Weiß gar nicht mehr wie sich das anfühlt.
Irrational diese denke.

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Rolf M. schrieb:
> Geht in C++, allerdings leider nicht in C. Damit habe ich dort
> regelmäßig zu tun, wenn ich z.B. irgendwelche Callbacks implementiere,
> die irgendwas übergeben bekommen, das ich halt einfach nicht brauche.
> Die sind halt so vorgegeben, und ich kann sie nicht ändern. Da nervt es
> mich jedesmal, dass man nicht wie in C++ einfach den Namen weglassen
> kann.

Das provoziert natürlich gleich wieder: "Stop using C!" Und das werden 
die meisten hier auch gleich wieder falsch verstehen.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Wilhelm M. schrieb:
> Und das werden
> die meisten hier auch gleich wieder falsch verstehen.
Ja!

Zudem heißt es:
Stop teaching C!

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Arduino Fanboy D. schrieb:
> Zudem heißt es:
> Stop teaching C!

Danke, aufgepasst.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Wilhelm M. schrieb:
> Danke, aufgepasst.

Ja, wenn du meinst, dass du in mir einen doofen vor dir hast, dann biste 
bei mir genau an der richtigen Adresse.

von Nop (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:

> Wollen aber, dass Arduinoanfänger, welche meist/oft auf Kompetenzlevel 1
> starten, Meldungen zu sehen bekommen, ja sie gar damit zudröhnen, obwohl
> diese sie gar nicht verstehen können

Die Warnungen sind ja nicht aus Jux da, sondern weil sie oftmals auf 
reale Bugs verweisen. Für einen Anfänger ist es besser, wenn er eine 
Warnung kriegt, die er nicht versteht, als wenn er einen Fehler debuggen 
soll, dessen Ursache er nicht versteht. Der Unterschied ist, daß der 
Compiler einen darauf hinweist, wo genau er ein Problem sieht. Zudem 
kann man eine unverständliche Warnmeldung googeln, einen mysteriösen 
Laufzeitfehler nicht.

von keine Ahnung (Gast)


Lesenswert?

Wo steht es im C-Standard, dass man alle Parameter einer Funktion im 
Funktionskörper zu benutzen hat?

von Arduino Fanboy D. (ufuf)


Lesenswert?

keine Ahnung schrieb:
> Wo steht es im C-Standard, dass man alle Parameter einer Funktion
> im
> Funktionskörper zu benutzen hat?
Gar nicht!
Die jeweilige ABI beschreibt, wie die Parameter übergeben werden.
Alle Warnungen sind eine freiwillige Gnade des Kompilers!

Johann Heinrich Pestalozzi:
> Wohltätigkeit ist das Ersaufen des Rechts im Mistloch der Gnade

von keine Ahnung (Gast)


Lesenswert?

Was hat das dann mit C zu tun? (oder mit C++?)

Nichts.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Nop schrieb:
> Für einen Anfänger ist es besser, wenn er eine
> Warnung kriegt, die er nicht versteht, als wenn er einen Fehler debuggen
> soll, dessen Ursache er nicht versteht.
Wieder eine Kompetenzlevel 3 oder 4 Aussage!

Kindergatenpsychologie, erste Stunde:
Was nicht verstanden wird, wird ausgeblendet und so das Ausblenden 
trainiert!

von Johannes S. (jojos)


Lesenswert?

Vor allem bestätigen sich so alle Vorurteile gegenüber lernresistenten 
Arduino Usern.

von "software" nicht (Gast)


Lesenswert?

Also die Arduion-Boards finde ich gut ;-)

von Arduino Fanboy D. (ufuf)


Lesenswert?

Johannes S. schrieb:
> Vor allem bestätigen sich so alle Vorurteile gegenüber
> lernresistenten
> Arduino Usern.
Es kann sein, dass du meinst dich über natürliche Verhaltensweisen 
erheben zu können.
(nennt man das dann überheblich?)

: Bearbeitet durch User
von Johannes S. (jojos)


Lesenswert?

Klar, alle die versuchen Compilermeldungen zu verstehen sind 
überheblich.

Wenn ich zum Doc gehe möchte ich auch nicht hören das ich krank bin, das 
verwirrt mich nur.

: Bearbeitet durch User
von Arduino Fanboy D. (ufuf)


Lesenswert?

Johannes S. schrieb:
> Klar, alle die versuchen Compilermeldungen zu verstehen sind
> überheblich.
Sonst noch was?

von Nop (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:

> Kindergatenpsychologie, erste Stunde:
> Was nicht verstanden wird, wird ausgeblendet und so das Ausblenden
> trainiert!

Und? Anfänger zu sein ist völlig OK. War jeder Profi irgendwann mal. Wer 
aber nichtmal Googeln kann oder will, wird immer nur Schrott-Software 
fabrizieren,  egal ob mit oder ohne Warnungen.

Deswegen ergibt es mehr Sinn, sich auf diejenigen zu konzentrieren, die 
das Zeug haben, über darüber hinauszuwachsen. Viel braucht es ja nicht, 
sondern nur den Willen zum Verstehen und Unverständliches in eine 
Suchmaschine reinzukopieren.

Davon sind übrigens gerade bei Arduino diejenigen nicht negativ 
betroffen, die sich für Software weder interessieren noch welche machen 
wollen, sondern die einfach nur fertige Sketches wollen. Das ist völlig 
legitim und eines der Kernfeatures bei Arduino. Ich denke da z.B. an 
Künstler, Modelleisenbahner usw., und die würden sogar noch profitieren, 
wenn die allgemeine Codequalität des Ökosystems stiege.

von Johannes S. (jojos)


Lesenswert?

Arduino Fanboy D. schrieb:
> Sonst noch was?

Ja, einen noch:
Ich möchte das die Leute (auch Arduino User) besser C/C++ programmieren, 
damit ich auf meine alten Tage nicht noch Rust lernen muss :)

von Arduino Fanboy D. (ufuf)


Lesenswert?

Nop schrieb:
> Und? Anfänger zu sein ist völlig OK. War jeder Profi irgendwann mal. Wer
> aber nichtmal Googeln kann oder will, wird immer nur Schrott-Software
> fabrizieren,  egal ob mit oder ohne Warnungen.
Einstieg auf Kompetenzlevel 1
Das "will" führt zu Kompetenzlevel 2
Dann werden Warnungen interessant. Und das mit dem Google klappt dann 
auch.

Selbst wenn nur 10% das Zeug haben, auf Level 3-4 vorzudringen, sollte 
man gerade diese nicht mit Vorurteilen und  Häme überschütten.

Merke:
ALLE wurden als nichts wissende geboren.

Johannes S. schrieb:
> Ich möchte das die Leute (auch Arduino User) besser C/C++ programmieren,
> damit ich auf meine alten Tage nicht noch Rust lernen muss :)

Heute ein klein wenig egozentrisch?
;-)

: Bearbeitet durch User
von Johannes S. (jojos)


Lesenswert?

Einen hab ich noch:
Wer keine Compilerwarnungen mag, der soll in JavaScript programmieren.

So, gute Nacht.

von Sheeva P. (sheevaplug)


Lesenswert?

Johannes S. schrieb:
> Klar, alle die versuchen Compilermeldungen zu verstehen sind
> überheblich.

Nein,  sowas machen Profis. Und zwar nur Profis. Du vielleicht, ich 
jedenfalls, möglicherweise auch unser Arduinofreund. Aber, stell Dir das 
mal vor: für Profis wie uns ist diese Arduino-Plattform gar nicht 
gedacht. Im Gegenteil, ausdrücklich, und sogar dokumentiert! Die 
Zielgruppe von Arduino sind Menschen, die mit Software und Entwicklung 
sonst überhaupt nichts am Hut haben. Kreative, Designer, Künstler, gerne 
auch andere Leute mit lustigen Ideen: für die ist das gemacht.

Wenn Du nun allerdings wirklich ein professioneller Entwickler wärst, 
der sich um Compilermeldungen kümmert... dann wüßtest Du natürlich, daß 
jede Software einen Scope und eine Zielgruppe hat. Die Konsequenz daraus 
sind so Dinge wie Usability, UI-Design... you get the idea? Really?

> Wenn ich zum Doc gehe möchte ich auch nicht hören das ich krank bin, das
> verwirrt mich nur.

Lustig... und völlig daneben, denn Du bist schon vollkommen verwirrt. 
Schau, Software wird für Menschen gemacht, nicht für Maschinen. Wer das 
vergißt, hat damit die Grenze vom Entwickler zum Fachidioten 
überschritten.

von MaWin (Gast)


Lesenswert?

Sheeva P. schrieb:
> für Profis wie uns

Du bist doch kein Profi, oder? Wo arbeitest du, nicht das ich da 
versehentlich ein Teil kaufe. ;-)

von Sheeva P. (sheevaplug)


Lesenswert?

MaWin schrieb:
> Sheeva P. schrieb:
>> für Profis wie uns
>
> Du bist doch kein Profi, oder?

Hin und wieder.

> Wo arbeitest du, nicht das ich da versehentlich ein Teil kaufe. ;-)

Wenn Du keine Großbank und kein Versicherungskonzern bist, mußt Du Dir 
keinerlei Sorgen machen. ;-)

von Johannes S. (jojos)


Lesenswert?

1
  if (a = b) {
2
    Serial.print("ooops");
3
  }

Das kompiliert in der Voreinstellung der Arduino IDE ohne Mecker. Warum 
soll der Herr Künstler sich hier einen Wolf suchen und nur der 'Profi' 
gewarnt werden das dieser Ausdruck sehr wahrscheinlich nicht so 
beabsichtigt war?
Es hat nichts mit Künstler oder Anfänger vs. Profi zu tun wenn 
warscheinliche Fehler unterdrückt werden.

Bei solchen Konstrukten wird eher C kritisiert weil so etwas syntaktisch 
erlaubt ist. Jetzt sollten die Hobbypsychologen auch mal die 
Compilerbauer mit ins Boot holen. Die geben sich nämlich unendlich viel 
Mühe Warnungen, also potentielle Fehler, für die Gefahren in C/C++ zu 
generieren. Und dann kommt Herr Arduino und schaltet das alles einfach 
komplett ab. So, wer ist hier jetzt arrogant oder überheblich?

In der IDE heisst eine Einstellungsmöglichkeit für die Warnungen 
'Standard', habe ich oben gezeigt. Standard oder in der englischen 
Version 'default' ist aber witzigerweise gar nicht default. Vielleicht 
ist es einfach auch nur ein Programmierfehler das es nach dem 
Installieren auf 'keiner / none' steht? Das wurde allerdings konsequent 
in die IDE V2 beta übernommen.

Ja, ich programmiere schon ein paar Jahre. Und mache immer noch Fehler 
und bin froh das vieles schon vom Compiler gefunden wird, auch 
potentielle Fehler. Versus z.B. JavaScript, da knallts viel häufiger 
erst zur Laufzeit. Daher kann ich Anfängern nur empfehlen auch Warnungen 
Ernst zu nehmen und in der IDE zu aktivieren. Ich habe auf Systemen 
gelernt wo man von diesem Luxus und der Weitsicht der Compiler noch 
geträumt hatte, heute kann man dazu noch Tante Google fragen oder die 
Schwarmintelligenz irgendwelcher Foren nutzen.
Ich versuche mich auch gern in anderen Gewerken, darf ich da auch alle 
Regeln der Kunst ignorieren nur weil ich es nicht gelernt habe?

von Wilhelm M. (wimalopaan)


Lesenswert?

Johannes S. schrieb:
> if (a = b) {
>     Serial.print("ooops");
>   }
>
> Das kompiliert in der Voreinstellung der Arduino IDE ohne Mecker.

Wobei das natürlich nicht passiert wäre, wenn die Variable/Referenz 
"const" deklariert hätte.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Wilhelm M. schrieb:
> Wobei das natürlich nicht passiert wäre, wenn die Variable/Referenz
> "const" deklariert hätte.

Und welcher Anfänger ohne Ahnung von Warnings macht sowas?

von Wilhelm M. (wimalopaan)


Lesenswert?

Mw E. schrieb:
> Und welcher Anfänger ohne Ahnung von Warnings macht sowas?

Die Regel "mache alles const, was Du kannst, und nur das non-const, was 
Du musst" steht üblicherweise ganz am Anfang. Zumindest bevor man sich 
mit der toolchain auseinandersetzt, sollte man solche Basics beachten. 
Ja - auch in Parameterlisten von Funktionsdefinitionen (nicht 
Deklarationen). Das beugt zudem einem schleichenden Bedeutungswechsel 
der Variablen vor. Und ja, Tutos (oder Bücher, very old-school), die das 
nicht erwähnen, sollte man gleich beiseite legen.

von Johannes S. (jojos)


Lesenswert?

nunja, das sind sicher die Regeln wie man besser programmiert. Nur der 
gemeine Anfänger wird nicht erst den C/C++ Standard durchlesen, dann 
noch diverse 'best practice' Bücher und sich dann die Arduino IDE 
installieren.
Auf dem Weg etwas besser zu machen hilft dann auch der strenge Compiler 
wenn man erstmal etwas empirischer an die Sache geht.

von Wilhelm M. (wimalopaan)


Lesenswert?

Johannes S. schrieb:
> nunja, das sind sicher die Regeln wie man besser programmiert.

Für mich sind das keiner Regeln, wie besser programmiert, sondern es 
sind die Grundlagen des Programmieren.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Wilhelm M. schrieb:
> Für mich sind das keiner Regeln, wie besser programmiert, sondern es
> sind die Grundlagen des Programmieren.
Eine Level 3-4 Aussage.

Johannes S. schrieb:
> wenn warscheinliche Fehler unterdrückt werden.
Die Fehler werden nicht unterdrückt.
Es ist die Default Einstellung der Toolchain, keine Warnungen zu zeigen.
Das passt nicht in dein Hirn, oder?

Wieso trittst du nicht an die Compilerersteller heran, und bittest sie 
die Defaulteinstellung der Warnings zu ändern?
Dann betrifft es alle Anwender der Toolchain.
Auch die Arduino User.
Vermutlich würde man dein Ansinnen gnadenlos abschmettern.

Noch mal:
Ich habe nichts dagegen, dass du für dich die positiven Effekte der 
Warnungen verstanden hast, und sie für dich selber zu nutzen weißt.
Das ist gut.
Das ist eine Erkenntnis, welche du gewonnen hast.
Aber es gibt keinen Grund deine Erkenntnisse auf alle Arduino User zu 
projizieren.
Damit nimmst du ihnen die Gelegenheit die gleiche Erkenntnis aus eigener 
Kraft zu gewinnen. Das nenne ich Bevormundung vom hohen Ross herab.
Man kann Leute nicht zu ihrem Glück zwingen, durch Bevormundungen.
Arroganz und Anmaßungen(ich weiß was für dich gut ist) sind keine guten 
Lehrmeister.
Das positive Lernen geht über Erkenntnisgewinn, nicht über 
Indoktrinierungen.

Wikipedia:
> Indoktrination (lateinisch doctrina ‚Belehrung‘) ist eine
> besonders vehemente, keinen Widerspruch und keine Diskussion
> zulassende Belehrung. Dies geschieht durch gezielte
> Manipulation von Menschen durch gesteuerte Auswahl von
> Informationen, um ideologische Absichten durchzusetzen
> oder Kritik auszuschalten.



Ich habe recht viel Erfahrung mit total blauäugigen/ahnungslosen Arduino 
Anfängern.
Sie alle, machen Fehler!
Auch ein wimalopaan wird noch ab und an Fehler machen.
Sei es auch nur ein vergessenes Semikolon, oder eine schließende 
Klammer....

Arduino beglückt den User, in einem solchen Fall, mit einer Errormeldung 
welche ihren Abschluss hierin findet:
> Dieser Bericht wäre detaillierter, wenn die Option
> "Ausführliche Ausgabe während der Kompilierung"
> in Datei -> Voreinstellungen aktiviert wäre.

Dann entscheidet es sich!
Ist der Betreffende in der Lage, eine solche Meldung zu erkennen, lesen, 
verstehen und dementsprechend zu handeln?
Wenn ja, wird er den Haken setzen, und das Thema ist durch, die 
Meldungen sprudeln.
Wenn nein, ist auch nicht zu erwarten, dass der Betreffende die 
Kompilermeldungen verstehend lesen kann. Dann braucht das noch Zeit.

Arduino bietet einen niederschwelligen Zugang zur µC Welt.
Unverständliche Warnungen, haben nichts mit niederschwellig zu tun, sind 
eher das Gegenteil davon.
Es liegt in der Hand des Anwenders zu wachsen.

von Martin H. (horo)


Lesenswert?

Johannes S. schrieb:
> das sind sicher die Regeln wie man besser programmiert

O'Reilly hat da was: „Weniger schlecht programmieren“

von Johannes S. (jojos)


Lesenswert?

Arduino Fanboy D. schrieb:
>> wenn warscheinliche Fehler unterdrückt werden.
> Die Fehler werden nicht unterdrückt.
> Es ist die Default Einstellung der Toolchain, keine Warnungen zu zeigen.
> Das passt nicht in dein Hirn, oder?

ich installiere keine Toolchain und keinen Compiler. Habe ich überhaupt 
einen Compiler? Was für einen? Was für Default Einstellungen soll diese 
Toolchain haben? Müssen die mich interessieren???

Ich habe ein Brettl mit Lampe, verbunden mit meinem Computer. Und ein 
Programm, da schreibe ich Anweisungen rein. Dann klicke ich auf den 
Knopf 'Überprüfen', nix kompilieren, ich nix Kompiler rufen. Da werden 
keine Fehler gemeldet. Dann klicke ich auf 'Hochladen', wieder keine 
Fehler. Und die Lampe blinkt....nicht. Wie jetzt, da waren doch keine 
Fehler. Die IDE hätte Tipps wo ich suchen kann und sagt es mir nicht? 
Warum nicht?
Für mich sind und bleiben das von der IDE unterdrückte Meldungen, auch 
wenn du das nicht in dein Hirn reinbekommst. Niemand ruft einen Compiler 
in der Arduino IDE auf, das macht die IDE schön selber und das ist auch 
gut so und darum benutzt man eine IDE ja auch. Und die IDE übergibt 
dabei noch eine Menge Einstellungen, unabhängig von irgendwelchen 
internen Voreinstellungen dieser ominösen Toolchain die weder mich noch 
einen anderen User interessieren.

von Johannes S. (jojos)


Lesenswert?

Arduino Fanboy D. schrieb:
> Dann betrifft es alle Anwender der Toolchain.
> Auch die Arduino User.
> Vermutlich würde man dein Ansinnen gnadenlos abschmettern.

Das Thema betrifft die IDE, nicht das low level Werkzeug Compiler. Und 
dort wird das Issue 'Warning default' regelmässig auf und zu gemacht, 
z.B. hier:
https://github.com/arduino/Arduino/issues/4184
Aber eher mit der Begründung zugemacht weil dann auch Warnungen aus dem 
Core aufpoppen.

Da soll sich mal noch jemand über die Vorwürfe beschweren das Arduino 
unprofessionell ist.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Johannes S. schrieb:
> die weder mich noch
> einen anderen User interessieren.

Wenn dich das doch alles gar nicht interessiert, dann frage ich mich 
doch: Wieso macht datt rechthaberische Kerlken eine solche Welle!



Johannes S. schrieb:
> Aber eher mit der Begründung zugemacht weil dann auch Warnungen aus dem
> Core aufpoppen.
>
> Da soll sich mal noch jemand über die Vorwürfe beschweren das Arduino
> unprofessionell ist.
Ja ja....
Der Core wirft keine Warnungen!

: Bearbeitet durch User
von A. S. (achs)


Lesenswert?

Johannes S. schrieb:
> Wie jetzt, da waren doch keine Fehler. Die IDE hätte Tipps wo ich suchen
> kann und sagt es mir nicht? Warum nicht?

Genau. Und deswegen einen separaten Knopf "Analyse".

Lampe geht nicht? Analyse.

Das Problem mit Warnung ist halt, sie machen nur Sinn, wenn keine 
offensichtlichen Fehler da sind. Klammer vergessen, Tippfehler? Da 
möchte ich nicht 100 Folge-Warnungen.

Mit einem Jahr Erfahrung sieht das anders aus, aber nur verschoben. Da 
ist dann Wall extra und pedantic immer an und die weiteren Warnungen nur 
einmal am Tag oder wenn es nicht wie erwartet läuft (ebenfalls per 
"Analyse")

von Wilhelm M. (wimalopaan)


Lesenswert?

Die sinnvollste Voreinstellung in der IDE wäre -Werror. Auch für einen 
Fahrschüler gilt erstmal, dass alle(!) Gebote und Verbote absolut 
eingehalten werden. Eine Übertretung ist erst dann möglich / erlaubt, 
wenn man den Grund des Verbotes verstanden hat. Sonst diskutiert man 
ewig herum, ohne den Kern zu erfassen (man denke nur an das immer und 
immer wieder auftauchende Thema type-punning via unions in C++). Wenn 
aber die Basics nicht klar sind, bleibt es bei -Werror und es braucht 
halt noch ein paar Fahrstunden.

von Wilhelm M. (wimalopaan)


Lesenswert?

Martin H. schrieb:
> O'Reilly hat da was: „Weniger schlecht programmieren“

Und wer das langweilig findet: "Elements of Programming", A.Stepanow

von A. S. (achs)


Lesenswert?

Wilhelm M. schrieb:
> Auch für einen Fahrschüler gilt erstmal, dass alle(!) Gebote und Verbote
> absolut eingehalten werden.

War bei mir nicht. Ich habe weder Blinker setzen noch Seitenblick machen 
müssen, als ich erstmals Kupplung kommen lassen durfte. Und ja, war eine 
öffentliche Straße.

Aber ich verstehe, was Du meinst: wer etwas neues lernen will sollte 
nicht damit anfangen.

von Wilhelm M. (wimalopaan)


Lesenswert?

A. S. schrieb:
> Aber ich verstehe, was Du meinst: wer etwas neues lernen will sollte
> nicht damit anfangen.

ich hätte vielleicht schreiben sollen: "... andernfalls hält der 
Fahrlehrer an (und nicht Du!), und Du darfst versuchen herauszufinden, 
was Du falsch gemacht hast"

Beitrag #6673761 wurde von einem Moderator gelöscht.
Beitrag #6673779 wurde von einem Moderator gelöscht.
von Oliver S. (oliverso)


Lesenswert?

A. S. schrieb:
> Mit einem Jahr Erfahrung sieht das anders aus, aber nur verschoben. Da
> ist dann Wall extra und pedantic immer an und die weiteren Warnungen nur
> einmal am Tag oder wenn es nicht wie erwartet läuft (ebenfalls per
> "Analyse")

Na ja, wenn du von vornherein geschrieben hättest, daß für dich „ohne 
Warnungen“ -Wall -Wextra -pedantic bedeutet, wären wir uns gleich eini& 
gewesen.

Oliver

von A. S. (achs)


Lesenswert?

Oliver S. schrieb:
> Na ja, wenn du von vornherein geschrieben hättest, daß für dich „ohne
> Warnungen“ -Wall -Wextra -pedantic bedeutet, wären wir uns gleich eini&
> gewesen.

Ähm, das habe ich doch, ... dachte ich.


A. S. schrieb:
> Wenn es 2 Level gibt (Kompilieren, Analysieren), dann sollte der zum
> Kompilieren nur wenige Warnungen produzieren. Für den einen (mit
> zusammenkopiertem Code) ist das vielleicht alle Warnungen aus (weil viel
> Müll übernommen wurde), für den anderen vielleicht -pedantic.

> Und fürs Analysieren sollte dann entsprechend schärfer geschaltet sein.

Beitrag #6676500 wurde von einem Moderator gelöscht.
von Arduino Fanboy D. (ufuf)


Lesenswert?

So, und wieder von vorn.... schrieb im Beitrag #6676500:
> :)))
Aus welcher Ballerburg bist du den ausgebüxt?

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Arduino Fanboy D. schrieb:
> Aus welcher Ballerburg bist du den ausgebüxt?

Moby sind offensichtlich wieder die Pillen ausgegangen.

von Sheeva P. (sheevaplug)


Lesenswert?

Johannes S. schrieb:
> Ich habe ein Brettl mit Lampe, verbunden mit meinem Computer. Und ein
> Programm, da schreibe ich Anweisungen rein. Dann klicke ich auf den
> Knopf 'Überprüfen', nix kompilieren, ich nix Kompiler rufen. Da werden
> keine Fehler gemeldet. Dann klicke ich auf 'Hochladen', wieder keine
> Fehler. Und die Lampe blinkt....nicht. Wie jetzt, da waren doch keine
> Fehler. Die IDE hätte Tipps wo ich suchen kann und sagt es mir nicht?
> Warum nicht?

Tja, warum nur? Was ist eigentlich eine Zielgruppe? Seid Ihr alle 
wirklich nur Codemonkeys und versteht nicht, wer Eure Software nutzt?

von Arduino Fanboy D. (ufuf)


Lesenswert?

Sheeva P. schrieb:
> warum nur?

Klarer Fall!
Andere Sichtweisen werden nicht zugelassen.

Weiß gar nicht wie ich mich dazu positionieren soll, da ich oft noch 
nicht mal mit mir einer Meinung bin.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Wollen aber, dass Arduinoanfänger, welche meist/oft auf Kompetenzlevel 1
> starten, Meldungen zu sehen bekommen, ja sie gar damit zudröhnen, obwohl
> diese sie gar nicht verstehen können

Wie oft ist hier schon vorgekommen, dass Programmieranfänger (nicht 
unbedingt Arduino-User) sich hier mit Fragmenten aus ihrem Code melden 
und gleichzeitig beklagen, dass ihr Code nicht funktioniert?

Das kommt fast täglich vor. Die Leserschaft stürzt sich dann auf den 
Code, pfriemelt dem TO dann noch einiges aus der Nase, der Code wird 
umgebaut, aber das Problem nicht beseitigt.

Plötzlich kommt dann ein Leser nach dutzenden oder hunderten Beiträgen 
später auf die Ursache und stellt fest:

"Da muss der Compiler doch eine Warnung ausgegeben haben!"

Und wie sich dann herausstellt, ist dem wirklich so. Die Warnung gab es 
schon, als der TO den Thread eröffnete. Hätte er sie beachtet, hätte er 
zwei Möglichkeiten gehabt:

- Den Fehler selbst korrigieren
- Die Warnung hier posten und nach dem Grund fragen können

Beide Wege hätten in nullkommanix zu einer Lösung geführt.

Ich persönlich halte es deshalb für sinnvoller, den User auf Warnungen 
zu sensibilisieren als all das abzustellen, was ihn überfordern könnte.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Frank M. schrieb:
> Und wie sich dann herausstellt, ist dem wirklich so. Die Warnung gab es
> schon, als der TO den Thread eröffnete. Hätte er sie beachtet,

Da hast du zwar den Knackpunkt erwischt, aber konsequent den falschen 
Schluss gezogen.

Dein, noch nicht mal Arduino, Beispiel User hat genau das gemacht, was 
total menschlich ist. Er hat die Meldungen nicht verstanden. Ist ja auch 
ein Anfänger. Man kann ja auch nicht von Anfängern erwarten, dass sie 
die /alle Meldungen verstehen.
Vermutlich hat er vorher auch schon einige Warnungen gesehen.
Aber leider das falsche gelernt:
1. ich verstehe die Warnungen nicht
2. sie haben keine Auswirkungen
3. also sind sie weder für mich, noch für die Anderen wichtig

Ja, da kommen dann solche Threads, wie dein Beispiel bei rum.
Hier kann man mit Fug und Recht sagen, dass die Warnungen wirkungslos 
waren. Evtl. sogar kontraproduktiv.

Ich habe da eine klare Meinung, zu:

Für User auf Kompetenzlevel 1 sind Warnungen irrelevant, ablenkend, 
störend und damit nicht hilfreich.

User auf Kompetenzlevel 2 sollten sich für die Meldungen interessieren 
und diese aktivieren.

Der User auf Kompetenzlevel 3 ist in der Lage die Meldungen zu 
analysieren und adäquat darauf zu reagieren.

Ein User auf Kompetenzlevel 4 "fühlt" schon beim schreiben, wo es eine 
Meldung geben wird, und wird diese Sandbank elegant umschiffen.

Damit stimme ich voll in dem Chor derjenigen mit ein, dass die Warnungen 
sehr wichtig sind. Möchte aber betonen, dass diese Wichtigkeit auch 
einen relativen Aspekt beinhaltet, und zwar den Kompetenzlevel des 
Lesers der Meldungen.
Und hier gehen eben die meisten ganz alleine von sich selber aus.
Sie, und wohl auch du, wohnen auf Level 3 oder 4. Was natürlich nicht 
schlimm ist, aber die Kommunikation mit Personen auf Level 1 erschwert, 
bis unmöglich macht.

Die Kompetezlevel sind natürlich nur in dem Modell so scharf abgegrenzt. 
In der Realität sind das gleitende Übergänge.





Für mich als "Arduino Berater" ist das natürlich auch Mehrarbeit!
Ein Beispiel aus meiner Praxis:
1
  float dies = PI;
2
  dies = dies/3,4;
Das funktioniert, tut aber nicht das, was erwartet wird.
Auf nachfrage: "Die float Zahl soll mit 4 Nachkommastellen dargestellt 
werden!"
Klar
Serial.print(dies,4);
tut genau das, 4 Nachkommastellen.

Einem solchen User muss ich(oder wer auch immer) dann sagen, bitte 
aktiviere deine Warnungen, und lese das Kapitel zum 
Anweisungsverkettungsoberator.

Die Hoffnung:
Er schaltet die Warnungen ein.
Sieht:
> warning: right operand of comma operator has no effect [-Wunused-value]

Das Resultat:
Ich habe die Arbeit, aber der User erkennt die Macht der Warnungen 
(hoffentlich).
Es ist immer viel leichter, was neues zu lernen, als sich alte 
antrainierte Fehlverhalten wieder abzugewöhnen. Hier das Fehlverhalten 
des Ignorierens der Warnungen.

Frank M. schrieb:
> Ich persönlich halte es deshalb für sinnvoller, den User auf Warnungen
> zu sensibilisieren als all das abzustellen, was ihn überfordern könnte.
Die Meldungen hatten "deinen" User offensichtlich nicht für Warnungen 
sensibilisiert, sondern eher desensibilisiert.
Oder?

Aus meiner unbedeutenden Sicht, sensibilisiert man keine  Menschen, in 
dem man sie zum ignorieren auffordert/zwingt, in dem man sie mit 
unverständlichem Kram überflutet.
 .
Meldungen, sind wichtig, ohne Zweifel.
Aber es braucht auch den Boden, auf dem sie ihre Wirkung entfalten 
können.


Ein hinkener Vergleich:
Kinder lernen Fahrrad fahren, indem sie es tun!
Die ersten Vorlesungen zur Fahrphysik kommen viel später, wenn 
überhaupt.

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Hier kann man mit Fug und Recht sagen, dass die Warnungen wirkungslos
> waren. Evtl. sogar kontraproduktiv.

Die Warnungen waren "kontraproduktiv"?!? Du willst mir also erzählen, 
dass ohne die Ausgabe einer Warnung der Fehler nicht aufgetreten wäre?!? 
Ha, der war gut!

Arduino Fanboy D. schrieb:
> Aber es bracht auch den Boden, auf dem sie ihre Wirkung entfalten
> können.

Die User brauchen nur eine klare Ansage:

"Du verstehst eine Warnung nicht? Dann poste sie hier oder frage 
jemanden, der sie versteht!"

Wenn jemand über eine rote Ampel geht und ein anderer zeigt warnend auf 
den nahenden LKW, dann sollte der andere mit dieser Warnung umgehen 
können. Oder meinst Du, der Warnende ist daran schuld, dass der 
Verkehrteilnehmer wegen einer Überflutung seiner Wahrnehmungen zu Tode 
kam?!?

Vermutlich war die Warnung eher kontraproduktiv... naja.

Wenn jemand eine Programmiersprache lernen will, dann hat er auch zu 
lernen, wie man mit Compilermeldungen umgeht. Wenn er dazu weder bereit 
noch in der Lage dazu ist, soll er sich ein anderes Hobby suchen.

Ein frischgebackener Hubschrauberpilot (Anfänger) reisst auch nicht alle 
roten Lämpchen aus seinem Cockpit, nur um zu verhindern, dass er 
abstürzen könnte.

: Bearbeitet durch Moderator
von Arduino Fanboy D. (ufuf)


Lesenswert?

Frank M. schrieb:
> Wenn jemand eine Programmiersprache lernen will, dann hat er auch zu
> lernen, wie man mit Compilermeldungen umgeht. Wenn er dazu weder bereit
> noch in der Lage dazu ist, soll er sich ein anderes Hobby suchen.

Es ist ein Prozess, das lernen!
Eine aneinander Kettung von vielen kleinen Schritten, welche sich über 
Jahre ziehen.

Wer das ignoriert, oder verneinen will, ist kein guter Pädagoge, und 
sollte sich eine andere Aufgabe suchen als über Anfänger bestimmen zu 
wollen.

Die µC Programmierung ist ein großes Gebiet. Die Warnungen, nur ein 
Teilaspekt.



Frank M. schrieb:
> Wenn jemand über eine rote Ampel geht und ein anderer zeigt warnend auf
> den nahenden LKW, dann sollte der andere mit dieser Warnung umgehen
> können. Oder meinst Du, der Warnende ist daran schuld, dass der
> Verkehrteilnehmer wegen einer Überflutung seiner Wahrnemungen zu Tode
> kam?!?

Eine Warnung ist eine Ablenkung.
Ich will gar nicht wissen, wie viele Menschen schon von einer Warnung 
abgelenkt wurden und sich so verletzt haben oder gar zu Tode gekommen 
sind.

Frank M. schrieb:
> Die Warnungen waren "kontraproduktiv"?!?
Zumindest haben sie in den "dutzenden oder hunderten Beiträgen" in 
deinem Beispiel keine Wirkung gehabt.
Und ja, evtl. kontraproduktiv, weil der User vorher durch Meldungen das 
falsche gelernt hat, das ignorieren.

Frank M. schrieb:
> Die User brauchen nur eine klare Ansage:
>
> "Du verstehst eine Warnung nicht? Dann poste sie hier oder frage
> jemanden, der sie versteht!"
Im nachhinein betrachtet, nach den hundert Beiträgen, voll logisch.
Aber der Fehler, das ignorieren der Warnung hat davor stattgefunden.
Und das davor ist für dich unerreichbar.
Die Ansage ist also Pardox.

: Bearbeitet durch User
von Johannes S. (jojos)


Lesenswert?

Arduino Fanboy D. schrieb:
> Aber der Fehler, das ignorieren der Warnung hat davor stattgefunden.

Woher weißt du das? Der TO schrieb:

helpme91 schrieb:
> Es gibt keine Fehlermeldung. Er compeliert alles einwandfrei.

Ob es Warnungen gab hat er nie beantwortet.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Johannes S. schrieb:
> Woher weißt du das? Der TO schrieb:

Aus dem fiktiven Beispiel
Frank M. schrieb:
> "Da muss der Compiler doch eine Warnung ausgegeben haben!"
>
> Und wie sich dann herausstellt, ist dem wirklich so. Die Warnung gab es
> schon, als der TO den Thread eröffnete. Hätte er sie beachtet, hätte er
> zwei Möglichkeiten gehabt:

Darum finde ich das Beispiel ja auch so gelungen, da es die Grundlagen 
meiner Annahmen bestätigt. In dem Beispiel hat es nicht geholfen, dass 
die Meldungen für den TO sichtbar waren.
Und ja, genau davon kann man in den Foren hunderte Beispiele finden.

Die Warnungen werden erst wichtig, wenn man diese Wichtigkeit am eigenen 
Leib spürt!

So auch die Operanden Rangfolge. Natürlich ist die auch wichtig. So 
richtig wichtig wird sie, wenn man damit auf die Nase fällt. Das ist 
dann der Zeitpunkt, wo man das Kapitel im Buch lesen sollte.
Dann ist der Boden reif, genau für diese Saat.

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Was hier geholfen hätte, wäre -Werror: Code der nicht compiliert, 
produziert auch keine Laufzeitfehler. Und der unbedarfte User hätte sich 
viel früher kompetenten Rat geholt.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Wilhelm M. schrieb:
> Was hier geholfen hätte, wäre -Werror

ACK, -Werror benutze ich grundsätzlich.

Beitrag #6679653 wurde von einem Moderator gelöscht.
von MaWin (Gast)


Lesenswert?

Frank M. schrieb:
> ACK, -Werror benutze ich grundsätzlich.

Warum?
Keine Disziplin Warnings zu fixen, ohne dass du dich selbst dazu 
zwingst?
Ich sehe in Werror keinerlei Vorteile.
Nur den Nachteil, dass das Projekt beim Compilerupdate (neue Warnings) 
nicht mehr compiliert und man sofort fixen darf, statt es zu einem 
bequemen Zeitpunkt machen so können.

von Rolf M. (rmagnus)


Lesenswert?

Frank M. schrieb:
> Wilhelm M. schrieb:
>> Was hier geholfen hätte, wäre -Werror
>
> ACK, -Werror benutze ich grundsätzlich.

Das kann ich mir für einen Release-Build ja noch vorstellen (kann aber 
schwierig sein, wenn man externen Code verwendet), aber grundsätzlich 
immer? Wenn ich beim Debuggen bin und dafür mal ein Stück vom Code 
auskommentiere, will ich nicht, dass es nicht mehr compiliert, nur weil 
diese temporäre Änderung dazu führt, dass irgendwo z.B. eine Variable 
nicht mehr genutzt wird und der Compiler mich darauf per Warnung 
hinweist. Dann muss ich die auch auskommentieren u.s.w. und hab einen 
Haufen unnötigen Zusatzaufwand, um ein Stück Code, das in der Form 
weniger als 5 Minuten existieren wird, um kurz was auszuprobieren, 
warnungsfrei zu machen.
Ich schaffe es dann auch ohne -Werror, dass der Code nachher keine 
Warnungen mehr erzeugt.

Arduino Fanboy D. schrieb:
> Die Warnungen werden erst wichtig, wenn man diese Wichtigkeit am eigenen
> Leib spürt!

Dazu muss man sie aber sehen! Wenn der Code ohne erkennbaren Grund 
nicht funktioniert, erkennt man daran auch nicht die Wichtigkeit von 
Warnungen.
Hältst du es wirklich für a besten, die Warnungen so lange zu 
verstecken, bis der Anfänger selbst auf die Idee kommt, dass es so etwas 
wie Warnungen geben könnte und sich auf die Suche danach begibt, ob man 
so etwas irgendwo einschalten kann? Ich würde sagen, die meisten fragen 
irgendwo in einem Forum nach, warum der Code nicht tut, und es kommt die 
Rückfrage: Gab's denn keine Compiler-Ausgaben? - Nö - Dann schalt erst 
mal die Warnungen ein. Wer hat da nun irgendwas gewonnen gegenüber 
bereits eingeschalteten Warnungen? So denkt sich der Anwender ja: "Na 
wenn die nicht von Anfang an eingeschaltet sind, können sie ja so 
wichtig nicht sein."

Arduino Fanboy D. schrieb:
> Frank M. schrieb:
>> Wenn jemand eine Programmiersprache lernen will, dann hat er auch zu
>> lernen, wie man mit Compilermeldungen umgeht. Wenn er dazu weder bereit
>> noch in der Lage dazu ist, soll er sich ein anderes Hobby suchen.
>
> Es ist ein Prozess, das lernen!
> Eine aneinander Kettung von vielen kleinen Schritten, welche sich über
> Jahre ziehen.

Und dabei sind Warnungen etwas, das schon sehr früh wichtig ist.

Arduino Fanboy D. schrieb:
> Frank M. schrieb:
>> Die User brauchen nur eine klare Ansage:
>>
>> "Du verstehst eine Warnung nicht? Dann poste sie hier oder frage
>> jemanden, der sie versteht!"
> Im nachhinein betrachtet, nach den hundert Beiträgen, voll logisch.
> Aber der Fehler, das ignorieren der Warnung hat davor stattgefunden.

Ich sehe keinen Vorteil darin, wenn jemand die Warnung ignoriert, weil 
er sie gar nicht angezeigt bekommt gegenüber dem Ignorieren, weil er sie 
nicht versteht.

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Rolf M. schrieb:
> Und dabei sind Warnungen etwas, das schon sehr früh wichtig ist.

Das ist genau der Grund, warum der Anfänger -Werror einsetzen soll: 
damit kommt er an den Warnungen nicht vorbei. Für jeden Anfänger gilt, 
dass sein Code OHNE Warnungen compiliert werden MUSS bzw. er muss jede 
Warnung erklären können. Als Anfänger kann er sie aber nicht beurteilen. 
Damit er sich um diesen Schritt nicht drücken kann, gilt -Werror.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

MaWin schrieb:
> Frank M. schrieb:
>
>> ACK, -Werror benutze ich grundsätzlich.
>
> Warum?
> Keine Disziplin Warnings zu fixen, ohne dass du dich selbst dazu
> zwingst?
> Ich sehe in Werror keinerlei Vorteile.

Das Problem: Beim Übersetzen mehrerer C-Module kommt es manchmal vor, 
dass in foo.c eine Warnung auftritt, in bar.c ein Syntaxfehler, der ein 
paar hundert Folgefehler zur Folge hat.

Resultat: Ich übersehe in den hunderten von Ausgabezeilen die eine 
Warnung in foo.c und korrigiere deshalb lediglich den/die Fehler in 
bar.c. Anschließend wird bar.c erfolgreich übersetzt, foo.c aber 
nicht(!) mehr, denn es wurde bereits vorher trotz der Warnung 
erfolgreich übersetzt.

Die Warnung bekomme ich daher nie wieder zu sehen, außer ich zwinge die 
IDE bzw. make dazu, alles neu zu übersetzen. Alles einfach "nur mal so" 
neu zu übersetzen, ist für mich verlorene Lebenszeit. Besser ich kümmere 
mich sofort um jede Warnung und sorge sofort dafür, dass sie nicht mehr 
auftritt. Insgesamt ist dieser Vorgang effektiver, als immer mal wieder 
zwischendurch "mal auf Gefühl" alles neu zu übersetzen - nur um 
entgangene Warnungen zu sehen.

Die Option "-Werror" sorgt dafür, dass die Übersetzung genau an der 
Stelle angehalten wird, wo etwas anzupassen ist. So kann mir keine 
Warnung mehr entgehen. Es macht auch unter Umständen wesentlich mehr 
Mühe, den Grund einer Warnung erst nach einer Woche auszumerzen statt 
unmittelbar nach der Änderung des Codes. Da hat man die Gedankengänge 
dazu noch im Kopf.

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?

MaWin schrieb:
> Ich sehe in Werror keinerlei Vorteile.

Ich schon.
Ich benutze eine Batch, die auf einen Klick alles macht. Der Error 
erzwingt, daß ein Errorlevel gesetzt wird und nicht erst das Target 
geflasht wird.

von Wilhelm M. (wimalopaan)


Lesenswert?

Peter D. schrieb:
> MaWin schrieb:
>> Ich sehe in Werror keinerlei Vorteile.
>
> Ich schon.

Es geht doch hier um Anfänger. Da ist -Werror absolut sinnvoll. 
Nicht-compilierender Code kann keinen Schaden anrichten.

Für Erfahrene kann in einem Dev-Build die Option heraus, und man hat 
selbst die Pflicht, die temporär auftretenden Warnungen bis zum Release 
wieder auf null zu bringen, weil das CI-System das sonst eh nicht 
annehmen würde. Und der Profi hat natürlich immer die Möglichkeit, sich 
(ggf. durch pragma) über bestimmte Warnungen hinweg zu setzen.

Beitrag #6680342 wurde von einem Moderator gelöscht.
von A. S. (achs)


Lesenswert?

Mit werror werden entweder die Warnungen ausgeschaltet oder die Anfänger 
abgeschreckt. Punkt.

Seit den ersten Jahren von C waren kompilieren und Analyse 2 getrennte 
Prozesse.

Aber heute soll der Bastler neben der Sprache auch noch durch Warnungen 
definierte best-practices vor dem ersten Hallo Welt verinnerlichen. 
Falsche Einrückung? Einer variable zweimal einen Wert zugewiesen ohne 
zwischendrin zu lesen? Ein a=b+c mit ints ohne vorher auf Überlauf zu 
testen? Lern erst Mal C, Du Lusche!

Als ich vor 20 Jahren xilinx-VHDL machte, da tauschten die Warnmeldungen 
nur so durch. Und selbst unser teurer eingekaufter Experte war kaum in 
der Lage, denen konkreten Nutzen zu entlocken.

Dann lieber wie früher: wenige Warnungen beim kompilieren, ausführliche 
Analyse regelmäßig.

von Nop (Gast)


Lesenswert?

A. S. schrieb:

> Dann lieber wie früher: wenige Warnungen beim kompilieren, ausführliche
> Analyse regelmäßig.

Und unnützes Debuggen dann auch regelmäßig, weil man Fehlern nachspürt, 
auf die der Compiler einen auch gleich hingewiesen hätte. Besonders 
schön, wenn der Fehler dann nicht offensichtlich und auf Anhieb 
auftritt, weil der fragwürdige Code nur unter bestimmten Bedingungen 
durchlaufen wird.

von A. S. (achs)


Lesenswert?

Nop schrieb:
> Und unnützes Debuggen dann auch regelmäßig, weil man Fehlern nachspürt,
> auf die der Compiler einen auch gleich hingewiesen hätte.


Ja, bei kleinen Projekten hast Du Recht.

Bei großen Projekten ist ein rebuild all mit ausführlicher Analyse im 
Bereich von Minuten. Gegenüber Sekunden bei kleinen Änderungen.

Aber welcher Profi macht nur kleine Projekte?

Und bei Anfängern ist es erstmal wichtig, die formalen Syntaxfehler wie 
vergessene Klammer zu sehen. Da reicht eine Analyse einmal vor dem 
einladen. Oder bei Fortgeschritten einmal in der Stunde oder wenn es 
nicht wie erwartet läuft.

Beitrag #6680440 wurde von einem Moderator gelöscht.
von Wilhelm M. (wimalopaan)


Lesenswert?

A. S. schrieb:
> Mit werror werden entweder die Warnungen ausgeschaltet oder die Anfänger
> abgeschreckt. Punkt.

Der Anfänger weiß doch gar nicht, wie er das in der IDE wieder 
ausschalten soll. Doppelpunkt.

von Nop (Gast)


Lesenswert?

A. S. schrieb:

> Bei großen Projekten ist ein rebuild all mit ausführlicher Analyse im
> Bereich von Minuten. Gegenüber Sekunden bei kleinen Änderungen.

Wenn man von vornherein mit Warnungen und Werror compiliert, dann kommt 
man gar nicht erst in die Situation, daß man "rebuild all" nur der 
Warnungen wegen machen muß. Es ist auch keine "ausführliche Analyse" 
gefragt, sondern der Compiler gibt die Warnungen nur aus. Das dauert 
nicht länger als ohne.

Was Du als "Analyse" betrachtest und nur ausnahmsweise mal tust, ist für 
Profis ein völlig normaler Arbeitsschritt - weil deren Zeit zu teuer 
ist, um die mit Debugging zu verschwenden. Das läßt man soweit möglich 
den Computer machen, weil der keine Lohnkosten hat.

von Wilhelm M. (wimalopaan)


Lesenswert?

A. S. schrieb:
> Aber heute soll der Bastler neben der Sprache auch noch durch Warnungen
> definierte best-practices vor dem ersten Hallo Welt verinnerlichen.

Nö, der Bastler soll liebe bei BasCom bleiben, oder µPython, ...

von Wilhelm M. (wimalopaan)


Lesenswert?

A. S. schrieb:
> Und bei Anfängern ist es erstmal wichtig, die formalen Syntaxfehler wie
> vergessene Klammer zu sehen

Das macht ja schon die IDE und so etwas kommt selbst bei Anfängern kaum 
noch vor.

von Wilhelm M. (wimalopaan)


Lesenswert?

Ein wünschenswerter Zustand wäre doch, das Code, der compiliert, auch 
nicht mehr debugged werden muss. Also muss es Ziel sein, soviel wie 
möglich an Analyse egal welcher Art in die Compilezeit zu verlagern. Ich 
will doch zur Laufzeit gar nicht debuggen! Der Compiler und 
you-name-it-tools sollen mir vorher sagen, dass irgendetwas nicht passt. 
Ich wäre doch töricht, Code, der von den statischen Analysetools 
angemeckert wird, überhaupt laufen zu lassen, und damit meine Zeit zu 
verschwenden.

von Falk B. (falk)


Lesenswert?

Dirk B. schrieb:
>> Es gibt keine ungefährlichen Warnungen.
>
> „Variable defined, but never used“

Umgekehrt wär's schlimmer ;-)

von Mark B. (markbrandis)


Lesenswert?

Wilhelm M. schrieb:
> Der Compiler und you-name-it-tools sollen mir vorher sagen, dass
> irgendetwas nicht passt.

Dazu müssten diese Tools aber auch die Anforderungen kennen. Wie soll 
das gehen?

von Arduino Fanboy D. (ufuf)


Lesenswert?

Wilhelm M. schrieb:
> Das ist genau der Grund, warum der Anfänger -Werror einsetzen soll:
> damit kommt er an den Warnungen nicht vorbei. Für jeden Anfänger gilt,
> dass sein Code OHNE Warnungen compiliert werden MUSS bzw. er muss jede
> Warnung erklären können. Als Anfänger kann er sie aber nicht beurteilen.
> Damit er sich um diesen Schritt nicht drücken kann, gilt -Werror.

Du sprichst hier von Leuten auf Kompetenzlevel 2!
Die bewusst Inkompetenten.
Die wissen, dass sie nix wissen und alles lernen wollen.
Selbst dann halte ich -Werror noch für etwas überzogen.

Arduino setzt noch eine Stufe tiefer an.
Der niederschwellige Einstieg in die µC Welt.
Kompetenzlevel 1



----



Jede neue Compilerversion kann neue Warnungen mitbringen....

Auch ganz nervige Dinger!
z.B. so geschehen bei switch/case, mit seinem Durchfall.
Ein hübsches Mittel gegen die Warnungen kam dann 1 bis 2 Gcc Versionen 
später.
Der Compiler liest den Kommentar /* fall through */ und unterdrückt die 
Warnung. Und jetzt dann
1
 [[fallthrough]]
 https://en.cppreference.com/w/cpp/language/attributes/fallthrough
Super gemacht!

Neuerdings ab version 10.2.0 C++20 mag der Gcc solche Ausdrücke nicht 
mehr:
> PORTB |= (1<<PB5);
Und beglückt einen mit einer Warnung.
1
E:\Programme\arduino\portable\sketchbook\sketch_may05a\sketch_may05a.ino:4:9: warning: compound assignment with 'volatile'-qualified left operand is deprecated [-Wvolatile]
2
    4 |   PORTB |= 1<<PB5;
3
      |         ^
Ich bin begeistert!
Man soll das wohl in Zukunft so schreiben:
> PORTB = PORTB | (1<<PB5);

Was alleine daran für ein Arsch voll Meldungen hängt.
Hunderttausende Codezeilen sind davon betroffen.

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Arduino Fanboy D. schrieb:
> Arduino setzt noch eine Stufe tiefer an.
> Der niederschwellige Einstieg in die µC Welt.
> Kompetenzlevel 1

Dazu gehört allerdings, dass man die Sprache schon beherrschen sollte. 
Und eine neue Sprache auf dem µC zu lernen, ist ja eine ganz schlechte 
Idee. Also zurück zum Start sprich PC und die Sprache (C / C++) lernen 
mit -Werror.

Wenn einige Weicheier das nicht mögen, dann werden wir sie nicht 
vermissen.

Arduino Fanboy D. schrieb:
> Ich bin begeistert!
> Man soll das wohl in Zukunft so schreiben:
>> PORTB = PORTB | (1<<PB5);

Und dieses Beispiel ist wirklich gut gewählt ;-) Der Anfänger sollte 
sich nun hinsetzen und lesen, oder eben einen Profi fragen, warum diese 
Warnung jetzt kommt.

von Oliver S. (oliverso)


Lesenswert?

Arduino Fanboy D. schrieb:
> Was alleine daran für ein Arsch voll Meldungen hängt.
> Hunderttausende Codezeilen sind davon betroffen.

Es zwingt dich ja niemand, älteren Code mit dem C++20-Sprachstandard zu 
kompilieren. Und wenn du das trotzdem tust, nennt dir der Compiler ja 
freundlicherweise die Warnung, die das auslöst, und damit ist es eine 
Sache von wenigen Sekunden, die zu deaktivieren.

Oliver

von Nop (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:

> Was alleine daran für ein Arsch voll Meldungen hängt.
> Hunderttausende Codezeilen sind davon betroffen.

Das kommt halt davon, wenn man sich auf einem µC tatsächlich C++ hat 
aufschwatzen lassen. Mit C wäre das nicht passiert.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Wilhelm M. schrieb:
> Arduino Fanboy D. schrieb:
>> Arduino setzt noch eine Stufe tiefer an.
>> Der niederschwellige Einstieg in die µC Welt.
>> Kompetenzlevel 1
>
> Dazu gehört allerdings, dass man die Sprache schon beherrschen sollte.
Nein!
Auf Kompetenzlevel 1 beherrscht man die Sprache noch nicht.
Es ist der erste Kontakt.

Auf Kompetenzlevel 2 erkennt man erst, dass man die Sprache lernen muss, 
damit es weiter geht.

Auf Kompetenzlevel 3 kann man sie, oder weiß zumindest wo man Details 
nachlesen kann.

Du schwebst auf Ebene 4

Der Lernprozess fängt mit Level 1 an.
Auch wenn dir das nicht schmeckt.


---


Oliver S. schrieb:
> Es zwingt dich ja niemand, älteren Code mit dem C++20-Sprachstandard zu
> kompilieren. Und wenn du das trotzdem tust, nennt dir der Compiler ja
> freundlicherweise die Warnung, die das auslöst, und damit ist es eine
> Sache von wenigen Sekunden, die zu deaktivieren.

Halt!
Hier in diesem Thread ist die Rede davon, dass man die Meldungen 
aktivieren muss, das abschalten wird ja gerade verurteilt.

Zudem hilft die "Ignorier/Abschalt Krücke" nur über 1 Jahr, oder 2.

: Bearbeitet durch User
von Wilhelm M. (wimalopaan)


Lesenswert?

Arduino Fanboy D. schrieb:
> Wilhelm M. schrieb:
>> Dazu gehört allerdings, dass man die Sprache schon beherrschen sollte.
> Nein!
> Auf Kompetenzlevel 1 beherrscht man die Sprache noch nicht.
> Der erste Kontakt.

Dein Kompetenzlevel 1 Noob sollte eben nicht auf einem µC anfangen, eine 
neue Sprache zu lernen. Du wirfst zwei Sachen in einen Topf: den Umgang 
mit µCs zu erlernen wie auch das Erlernen einer neuen 
Programmiersprache. Der Umgang mit etwas Elektrotechnik (was ist 
Spannung, was ist Strom, was ist ein Widerstand, was ist das Ohm'sche 
Gesetz, ...) ist die eine Sache, die Sprache eine andere.

Du scheinst ja gewissermaßen auch als Tutor unterwegs zu sein. Dann 
sollte es zu Deiner didaktischen Kompetenz auch gehören zu erkennen, 
dass die Vermischung beider Lernziele schlicht dumm ist.

von A. S. (achs)


Lesenswert?

Wilhelm M. schrieb:
> Dein Kompetenzlevel 1 Noob sollte eben nicht auf einem µC anfangen, eine
> neue Sprache zu lernen

Und ich dachte, ich würde eure Überheblichkeit überzeichnen.

A. S. schrieb:
> Falsche Einrückung? Einer variable zweimal einen Wert zugewiesen ohne
> zwischendrin zu lesen? Ein a=b+c mit ints ohne vorher auf Überlauf zu
> testen? Lern erst Mal C, Du Lusche!

Gelang mir nicht.

Wie nennt man noch Mal Leute, die anderen Lasten auferlegen, die sie 
selbst nicht tragen?

Wilhelm M. schrieb:
> Und der Profi hat natürlich immer die Möglichkeit, sich (ggf. durch
> pragma) über bestimmte Warnungen hinweg zu setzen.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Wilhelm M. schrieb:
> Du wirfst zwei Sachen in einen Topf: den Umgang
> mit µCs zu erlernen wie auch das Erlernen einer neuen
> Programmiersprache.
> Dann
> sollte es zu Deiner didaktischen Kompetenz auch gehören zu erkennen,
> dass die Vermischung beider Lernziele schlicht dumm ist.

Was ich erkenne, ist eine Sache.
Was du erkennst, offensichtlich eine andere.

Interessanter Weise, ist es gerade Arduino, was dann irgendwie beides 
unter einen Hut bekommt.
Auch wenn es nicht deinen Ansprüchen gerecht wird.
! Zielgruppe !

: Bearbeitet durch User
von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Arduino Fanboy D. schrieb:
> Interessanter Weise, ist es gerade Arduino, was dann irgendwie beides
> unter einen Hut bekommt.

Kannst Du bitte die Formulierung "irgendwie" näher ausführen? Wenn ich 
diesen Satz lese, übersetze ich dieses "irgendwie" im Kopf lediglich 
durch "mit Ach und Krach". Nix ganzes, noch nichtmal halbes.

Die meisten Arduino-Anwender, die ich hier im Forum mit ihren 
Programmierproblemen kennenlerne, sind für mich keine richtigen 
Programmierer, sondern eher welche, die sich unter anderem mit 
Halbwissen irgendwelche Libs zusammenklicken, ohne überhaupt zu 
verstehen, was sie da machen.

Wenn's dann nicht funktioniert und sie sich hier im Forum melden, muss 
ich mich manchmal über die vorherrschende Ahnungslosigkeit einfach nur 
noch wundern. Das fängt schon mit den falschen Basis-Vorstellungen, was 
bei Arduino ein "Analog-Ausgang" überhaupt ist, an. "PWM? Was ist denn 
das?!?".

Von den Unterschieden Analog- und Digital-Inputs will ich erst gar nicht 
reden. Entsprechend ist auch die Codequalität, die da produziert wird. 
Nur wenige von ihnen schaffen den Absprung von Arduino, um sich dann 
wirklich mit einer µC-Familie (sei es AVR, sei es STM32) und deren 
hardwarenahe Programmierung intensiv zu beschäftigen und die Vorgänge 
auch verstehen zu wollen.

Tut mir leid, dass ich hier mal wieder ein Klischee bestätigen muss. 
Aber meines Erachtens ist es so, dass die Arduino-Plattform nicht gerade 
die Fähigkeit fördert, sich wirklich mit der Materie beschäftigen zu 
wollen. Alles ganz easy! Ganz im Gegenteil: durch die ziemlich tief 
liegende Deppenschranke wird auch die Produktion von viel Mist 
gefördert.

: Bearbeitet durch Moderator
Beitrag #6680949 wurde von einem Moderator gelöscht.
Beitrag #6680952 wurde von einem Moderator gelöscht.
von Nop (Gast)


Lesenswert?

Frank M. schrieb:

> Die meisten Arduino-Anwender, die ich hier im Forum mit ihren
> Programmierproblemen kennenlerne, sind für mich keine richtigen
> Programmierer, sondern eher welche, die sich unter anderem mit
> Halbwissen irgendwelche Libs zusammenklicken, ohne überhaupt zu
> verstehen, was sie da machen.

Das ist aber auch die Zielgruppe von Arduino. Leute, die eigentlich was 
ganz anderes machen wollen, und wo der Arduino nur ein Hilfsmittel ist. 
Beispielsweise Modelleisenbahner. Die wollen eigentlich Modellbahn 
machen, nicht aber sich mit µC-Programmierung befassen. Dafür ist das 
schon gut, einfach einen Sketch runterzuladen und einzuspielen sowie die 
Shields zusammenzustecken.

Nur, diese Anfänger dann ohne aktivierte Warnungen programmieren zu 
lassen, das wird absehbar in frustrierende Fehler führen, die sie nicht 
verstehen und auch nicht finden, weil sie ohne Compiler-Hilfestellung 
nichtmal wissen, wonach sie suchen müssen.

Es ist umgedreht übrigens auch ein Grund, wieso es bei einer Bewerbung 
auf eine Stelle in der embedded-Branche ein ziemlicher Minuspunkt ist, 
wenn man "Arduino" als Erfahrung angibt, weil es nichts Gutes über einen 
Bewerber aussagt, wenn er das als relevante "Erfahrung" betrachtet. Da 
kann man auch gleich in die Bewerbung schreiben "ich bin meistens 
pünktlich".

Da die Hardware aber günstig verfügbar ist, ist sie auch beliebt z.B. 
für Uni-Arbeiten, Prototyping oder Teststandsaufbauten - aber auch nur 
die Hardware. Wenn man sich damit bewirbt, bezeichnet man das besser 
nicht als Arduino, sondern als Board mit dem jeweiligen µC.

von Arduino Fanboy D. (ufuf)


Lesenswert?

Frank M. schrieb:
> Kannst Du bitte die Formulierung "irgendwie" näher ausführen? Wenn ich
> diesen Satz lese, übersetze ich dieses "irgendwie" im Kopf lediglich
> durch "mit Ach und Krach". Nix ganzes, noch nichtmal halbes.

Ich versuchs vielleicht mal...
Aber zuerst ein anderer Aspekt.

In jedem Absatz deines Beitrags arbeitest du intensiv mit Projektionen.
Du projizierst deine Sicht der Dinge auf die Arduino Anfänger.
Natürlich siehst du dann auch nur das, was du auf diese Leute 
projizierst.

Wenn ich den typischen Arduino Anfänger beschreiben sollte, dann sehe 
ich einen männlichen oder weiblichen Menschen, im Alter zwischen 10 und 
75. Irgendeiner beliebigen Nationalität. Und damit dieser Mensch auf dem 
Kompetenzlevel 1 landet, ist er völlig fachfremd.
Hat keine Ahnung, von gar nichts.
Und genau dort wird er von Arduino begrüßt!

- Einfache Installation.
- USB Bords anstecken kann jeder.
- Beispiel kompilieren, und läuft.

Niederschwellig, so niederschwellig, wie es kein anderes "µC 
Programmiersystem" bisher geschafft hat.

Natürlich stellt sich irgendwann die Frage nach den LED Vorwiderständen.
Da muss jeder durch.
Auch du bist da durch (auch wenn du es mittlerweile vergessen hast).


U.a. auf Grund der Niederschwelligkeit starten recht viele mit dem 
System.
Zuhause, weil das Einsteigerset unter dem Weihnachtsbaum liegt, in der 
Schule, weil es auf dem Programm steht, im Studium/Ausbildung....
Wenn ich mal schätzen soll, dann würde ich mal sagen, dass ca 10% der 
Arduino Anfänger das "Programmierer Gen" besitzen, also die Chance 
irgendwann die Kompetenzstufe 4 zu erreichen.

Und das ist auch der Grund, warum ich dich in der Rolle des Moderator in 
diesem Forum bitten möchte:
Auch wenn du weißt, dass nur 10% durchkommen, verprelle sie nicht. Denn 
ich glaube nicht dass man/du sie leicht erkennen kann.
Ja, sie haben keine Ahnung. Aber sie stehen am Anfang. Da hat man keine 
Ahnung, sonst wäre es ja nicht der Anfang.

Wem das Gen fehlt, wird sich irgendwann ein anderes Hobby suchen.
Aber die wenigen, welche durchkommen können zu verprellen, ist nicht 
sonderlich nett.





Frank M. schrieb:
> Tut mir leid, dass ich hier mal wieder ein Klischee bestätigen muss.
> Aber meines Erachtens ist es so, dass die Arduino-Plattform nicht gerade
> die Fähigkeit fördert, sich wirklich mit der Materie beschäftigen zu
> wollen. Ganz im Gegenteil: durch die ziemlich tief liegende
> Deppenschranke wird auch die Produktion von viel Mist gefördert.
Das ist schon fast das klassische Arduino Bashing.
Natürlich bauen Anfänger Mist.
Und viele Anfänger machen viel Mist.
> Eine Kuh macht Muh.
> Viele Kühe machen Mühe.

Dazu sage ich:
Der Profi, welcher von einem Anfänger Genialität erwartet, der ist ein 
Depp.

----

Ich weiß nicht auf welchem Kompetenzlevel du wohnst, vielleicht 3 oder 
4.
Einen Level kann man sich mit mühe runter denken.
Darum verstehe ich auch, dass du die Leute mindestens auf Kompetenzlevel 
2 erwartest.
Das ist aber an der Realität vorbei.
Viele tauchen mit NULL Ahnung in das Gebiet ein, auf Level 1

---

Jetzt habe ich das Kompetenzstufen Modell schon dutzende male verwendet.
Hier mal ein Link dazu:
https://de.wikipedia.org/wiki/Kompetenzstufenentwicklung

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Frank M. schrieb:
> Tut mir leid,...

Darum lese ich auch die Beiträge vom Fanbübchen erst gar nicht. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.