Ich habe heute bei einem kleinen Sketch zur Pinabfrage (und später noch zur RX-Datenabfrage) mich gewundert daß ich bei einer Pinabfrage einen falschen Wert erhalte.
Die Abfrage war if(Adr0_=1){bitSet(CS,0);} wobei Adr0_ die Variable zur Aufnahme des Pinzustands von PIN D6 vom Arduino Nano ist. Der Pinzustand war 0 aber die Variable war auf "HIGH" also 1. Es gab keine Fehlermeldung beim Kompilieren. Bis ich dann festgestellt habe daß in der if-Anweisung ein "=", also eine Zuweisung anstatt ein "==", also eine Abfrage stand.
Müßte der Compiler da nicht eine Fehlermeldung rausgeben? Da hätte ich mir eine Menge Sucharbeit erspart. In einer if-Anweisung kann ja von Haus aus keine Zuwqeisung stehen, das müßte der Compiler meiner Meinung nach wissen.
There's nothing at all wrong with an assignment in an "if", and the compiler will give you a warning if you do it.
It is quite common to call a function in an "if", assign the return value to persistent storage, and test the value to see if it is zero.
I haven't looked for a while, but it was very common in device drivers and filesystems in the Linux kernel, for instance.
Hi
Der Kompiler liefert Dir dazu eine WARNUNG.
Etwas blöd ist, daß man Diese erst in den Einstellungen der IDE aktivieren muß.
Dort kannst Du ausführliche Meldungen beim Kompilieren und beim Hochladen anklicken - also zwei Haken setzen.
Standardmäßig sind diese Haken - warum auch immer - nämlich aus.
Dann hast du zukünftig viel mehr rote Schrift ... und Alles davon kann Dir böse auf die Füße fallen - wie ein einfaches = innerhalb einer IF.
MfG
In einer if-Anweisung kann ja von Haus aus keine Zuwqeisung stehen,
Das ist ein fataler Irrtum.
Warum sollte das ein Programmfehler im Sinne der C-syntax sein? Ok es ist ein Logikfehler Deinerseits weil der Kode nicht das macht, was Du willst, aber in C ist das nicht etwas falsches.
In einer if-Anweisung kann ja von Haus aus keine Zuweisung stehen, das müßte der Compiler meiner Meinung nach wissen.
Wie Combie bereits sagte ist das eine Fehlmeinung Deinerseits.
Man kann aber einen solche Vergleich so schreiben daß C einen Fehler produziert:
Wenn man satt
if(Adr0_=1){bitSet(CS,0);}
einfach den Vergleich umdreht:
if(1 = Adr0_){bitSet(CS,0);}
wird das eine unzulässige Zuweisung und produziert darum eine Fehlermeldung.
Grüße Uwe
Eine Zuweisung gibt den zugewiesenen Wert zurück. Daher geht das. Dafür gibt es wie gesagt auch einige Anwendungen. z.B. eine Zeichenkette auslesen und im gleichen Schritt abfragen ob das aktuelle Zeichen Null ist.
OK ich denke die Lösung für mein Problem war daß ich die Warnungen nicht eingeschaltet habe - danke postmaster-ino ![]()