Nehmen Sie eine solche Situation an:
%Vor%In C und C ++ ist dies undefiniertes Verhalten, wie hier beschrieben: Nicht definierte Verhaltens- und Sequenzpunkte
Wie sieht diese Situation jedoch aus?
Ich korrigiere ein Javascript - & gt; C ++ - Port, in dem dies an vielen Stellen unbemerkt blieb. Ich würde gerne wissen, wie andere Sprachen im Allgemeinen damit umgehen ... Die Reihenfolge undefiniert zu verlassen ist irgendwie spezifisch für C und C ++, nicht wahr?
Laut ECMA Script specification , dem ich glaube, dass Javascript in Multiplikations- und Additionsanweisungen konform sein soll, wertet es die linke Seite vor der Auswertung der rechten Seite aus. (siehe 11.5 und 11.6). Ich denke, das bedeutet, dass der Code
entsprechen sollte %Vor%Sie sollten jedoch nicht immer darauf vertrauen, dass die Spezifikation der Implementierung entspricht!
In verwirrenden Fällen wie diesem ist es am besten, wenn Sie mit verschiedenen Eingaben zu den mehrdeutigen Codezeilen in der ursprünglichen Betriebsumgebung experimentieren und versuchen, herauszufinden, was es tut. Stellen Sie sicher, dass Sie Fälle testen, die eine Hypothese bestätigen können, und testen Sie Fälle, die sie fälschen können.
Edit: Offensichtlich implementiert JavaScript die 3. Ausgabe von ECMAScript, also habe ich stattdessen die Verknüpfung zu dieser Spezifikation geändert.
Wenn Sie die Regeln für einen Ausdruck fragen oder nachschlagen müssen, sollten Sie diesen Ausdruck praktisch nicht in Ihrem Code verwenden. Jemand anderes wird in zwei Jahren zurückkommen und es falsch verstehen, dann es umschreiben und den Code brechen.
Wenn dies eine rein theoretische Frage sein sollte, kann ich leider keine Angaben zu diesen anderen Sprachen machen.
Wie sieht diese Situation jedoch aus: JS, Java, PHP, C # ...
Um vollkommen ehrlich zu sein, sieht int a = (--t)*(t-2); int b = (t/=a)+t;
wie Mist aus.
Es ist schön, einen ausgefallenen Code zu haben, der hübsch und elitär sein kann, aber das ist absolut nicht nötig. Die Lösung für jede Sprache, wenn sie mit Code wie diesem konfrontiert wird, besteht darin, ein paar weitere Semikolons hinzuzufügen (es sei denn, Sie beschäftigen sich mit Python):
%Vor%Wenn eine andere Reihenfolge der Operationen gewünscht wird, passen Sie die Zeilen entsprechend an. Wenn Sie versuchen, alten Buggy-Code zu reparieren, den Code reparieren , implementieren Sie die Spaghetti eines anderen nicht einfach neu.
Bearbeiten zum Hinzufügen:
Ich erkannte, dass ich die ursprüngliche Frage nie speziell beantwortet habe:
Wie gehen Sprachen mit Nebenwirkungen von zusammengesetzten Operatoren um?
Schlecht.
Tags und Links javascript c c++ programming-languages undefined-behavior