Wir sagen, dass Ausdrücke Werte “auswerten” und Anweisung den Computer anweist, “auszuführen”. Aber für mich scheint es wie die gleiche Terminologie. Was ist der Unterschied zwischen Ausführung und Auswertung in C?
Was ist der Unterschied zwischen Ausführung und Auswertung?
Jin
Es ist wirklich nah genug, um in fast allen Fällen keine Rolle zu spielen.
Um ganz genau zu sein, würde ich sagen, dass die Auswertung einen Ergebniswert erzeugt und den Zustand nicht ändert, während die Ausführung den Zustand ändert und der Ergebniswert entweder nicht erzeugt wird oder zufällig ist und ignoriert wird.
Im Allgemeinen werten wir Ausdrücke aus, wir führen Anweisungen aus.
Also zum Beispiel, wenn wir eine haben if
Anweisung in C, werten wir zuerst die Bedingung aus, dann führen wir den Körper aus (oder nicht).
Die Verwirrung wird verstärkt, weil wir in C Ausdrücke haben, die den Status ändern (Zuweisungsoperatoren, Inkrement-/Dekrementoperatoren) und die Anweisungen nichts anderes als Ausdrücke sind.
Also, wenn Sie sehen
a = b+c;
in C ist es eine Anweisung, die ausgeführt wird, aber die Ausführung besteht aus der Auswertung des Ausdrucks a=b+c
wobei das Ergebnis (nicht konstanter Verweis auf a
) wird verworfen und die Nebenwirkung (a
ändert seinen Wert) ist wichtig.
-
Wann beginnt die Auswertung? Vor oder nach oder gleichzeitig mit der Hinrichtung?
– Hacken
28. Juli 2016 um 12:41 Uhr
-
Evaluation ist Teil der Ausführung – manchmal der einzige Teil.
– Benutzer3458
13. Februar 2019 um 15:53 Uhr
Fabio sagt, Monica wieder einzusetzen
Es ist nur eine Frage der Linguistik. Ausdrücke werden ausgewertet, Anweisungen werden ausgeführt. In beiden Fällen können wir sagen, dass “etwas getan wird”, und ich würde mir über den Unterschied keine allzu großen Sorgen machen.
Zur Verdeutlichung: Grob gesagt ist eine Anweisung eine Codezeile, und ein Ausdruck ist das, was Sie zwischen Klammern in an finden if()
oder while()
oder auf der rechten Seite eines Gleichheitszeichens.
Zum Beispiel, int x = 2 + 3;
ist eine Anweisung, die eine Variable deklariert x
und weist ihm das Ergebnis des Ausdrucks zu 2 + 3
das ist, 5
.
-
Wie viele Ausdrücke sind in
x = y + z;
? Der zweite Absatz ist irreführend.– Hacken
28. Juli 2016 um 12:52 Uhr
-
Aber
int x = 2 + 3
ist ein Ausdruck.– Bauss
28. Juli 2016 um 13:54 Uhr
-
@hackks: Ich glaube, im dritten Absatz habe ich erklärt, was ich meinte. Ich versuche nicht, 100% genau zu sein, sondern die Dinge auf einfache Weise zu erklären. In Ihrem Beispiel technisch beides
y
undz
sind Ausdrücke, aber ich würde sagen, es wäre sinnvoller, sie so zu nennen, wenn sie Funktionen wären, wiex = y() + z();
. Wenn es sich um Zahlen handelt, scheint es mir übertrieben, sie als Ausdrücke zu bezeichnen. Und in diesem speziellen Kontext würde ich nicht sagen, dass die ganze Zeile ein Ausdruck ist, weil sie nur verwirrt. Ich versuche, den Unterschied zwischen Ausdrücken und Anweisungen zu zeigen. Zu sagen, dass etwas beides ist, hilft nicht.– Fabio sagt, Monica wieder einzusetzen
28. Juli 2016 um 14:07 Uhr
-
@Bauss Ich denke, mein vorheriger Kommentar ist auch für dich. Übrigens habe ich den Satz umformuliert, um klarzustellen, dass „ungefähr“ nicht nur für den ersten Satz gilt, sondern für beide. Das heißt, die Definition von Ausdruck, die ich gebe, ist auch grob. Auch hier versuche ich, die Dinge einfach zu machen, nicht genau. Trotzdem wäre es schön, etwas vom OP zu hören …
– Fabio sagt, Monica wieder einzusetzen
28. Juli 2016 um 14:12 Uhr
-
@FabioTurati; Ein Ausdruck mit Semikolon am Ende ist eine Anweisung. Ich würde sie nicht als Anweisung bezeichnen, bis ich einen Assemblercode schreibe/lese.
– Hacken
28. Juli 2016 um 15:46 Uhr
hackt
Wenn eine Anweisung ausgeführt wird, kommt es zur Aktion der Auswertung ihrer Ausdrücke. Zuerst erfolgt die Ausführung und dann die Auswertung.
Im Ausschnitt
int i = 5, j;
j = 10 + 5*i;
wenn die Aussage j = 10 + 5*i;
wird dann die Auswertung von Ausdrücken ausgeführt j
, 10
, 5*i
, 10 + 5*i
und j = 10 + 5*i
stattfinden. Beachten Sie, dass die ersten drei in beliebiger Reihenfolge ausgewertet werden können.
-
“Zuerst erfolgt die Ausführung und dann die Auswertung.” Beziehen Sie sich auf die Zeit, in der diese Prozesse beginnen? Oder Ende? Überschneiden sie sich zeitlich? Oder schließen sie sich gegenseitig aus?
– CinCout
28. Juli 2016 um 12:45 Uhr
-
@CinCout; Zur Verdeutlichung ein Beispiel hinzugefügt.
– Hacken
28. Juli 2016 um 12:49 Uhr
-
@Hacks Danke für die Antwort! Was passiert bei der Ausführung im Compiler?
– Jin
28. Juli 2016 um 13:28 Uhr
rtmh
Ich habe es mir so vorgestellt: Der Begriff ‘Ausdruck’ ist aus der mathematischen Terminologie übernommen. Auswertung ist definiert als:
auswerten
Auswerten bedeutet, den Wert eines numerischen oder algebraischen Ausdrucks zu finden.
Ausdrücke haben die folgende Definition: (Fettdruck zur Hervorhebung hinzugefügt)
Ein Ausdruck in einer Programmiersprache ist a Kombination aus einem oder mehreren expliziten Werten, Konstanten, Variablen, Operatoren und Funktionen, die die Programmiersprache interpretiert (gemäß ihren besonderen Vorrang- und Assoziationsregeln) und berechnet, um einen anderen Wert zu erzeugen (“zurückzugeben”, in einer zustandsbehafteten Umgebung).
Beim Programmieren besteht praktisch jede Anweisung (oder jede Anweisung, die es wert ist, geschrieben zu werden) aus vielen Ausdrücken. Ich habe immer verwendet Auswertung beziehen sich auf die Berechnung dieser Ausdrücke und Hinrichtung bezieht sich auf die Berechnung der gesamten Anweisung. Dies fällt häufig auch mit Unterscheidungen in Bezug auf den Rückgabewert und die Nebenwirkungen zusammen. Vollständige Anweisungen haben normalerweise Nebeneffekte und Ausdrücke geben normalerweise einen Wert zurück.
Es ist mehr oder weniger dasselbe, stören Sie sich nicht mit diesen Feinheiten der englischen Sprache.
– Jabberwocky
28. Juli 2016 um 12:33 Uhr