2016-07-28 19 views
8

Wir sagen, dass Expressionen Werte "auswerten" und Anweisung Computer "ausführen". Aber mir scheint es dieselbe Terminologie zu sein. Was ist der Unterschied zwischen Ausführung und Auswertung in C?Was ist der Unterschied zwischen Ausführung und Auswertung?

+0

Es ist mehr oder weniger die gleiche Sache, nicht mit diesen englischen Sprache Feinheiten stören. –

Antwort

4

Wenn eine Anweisung ausgeführt wird, kommt es zur Auswertung ihrer Ausdrücke. Erste Ausführung erfolgt und dann Auswertung.

Im Snippet

int i = 5, j; 
j = 10 + 5*i; 

, wenn die Anweisung j = 10 + 5*i; dann Auswertung von Ausdrücken ausgeführt wird 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.

+0

"Erste Ausführung erfolgt und dann Auswertung." Beziehen Sie sich auf den Zeitpunkt, zu dem diese Prozesse beginnen? Oder Ende? Überlappen sie sich zeitlich? Oder schließen sie sich gegenseitig aus? – CinCout

+0

@CinCout; Ein Beispiel zur Verdeutlichung hinzugefügt. – haccks

+0

@hacks Danke für die Antwort! Wenn was ausgeführt wird, was passiert innerhalb des Compilers? – Jin

2

Es ist wirklich nahe genug, um in fast allen Fällen keine Rolle zu spielen.

Wenn wir sehr präzise sein sollen, würde ich sagen, dass die Auswertung einen Ergebniswert erzeugt und den Status nicht ändert, während die Ausführung den Status ändert und der Ergebniswert entweder nicht erzeugt oder zufällig ist und ignoriert wird.

Im Allgemeinen, wir bewerten Ausdrücke, wir führen Anweisungen aus.

Also, zum Beispiel, wenn wir eine if Aussage in C haben, bewerten wir zuerst die Bedingung, dann führen wir (oder nicht) den Körper aus.

Die Verwirrung wird verstärkt, weil wir in C Ausdrücke haben, die den Status ändern (Zuweisungsoperator, Inkrement/Dekrementoperatoren) und die Anweisungen, die nichts als Ausdrücke sind.

Also, wenn Sie

sehen
a = b+c; 

in C, es ist eine Anweisung, die ausgeführt wird, aber die Ausführung besteht aus der Auswertung des Ausdrucks a=b+c, in dem das Ergebnis verworfen und die Nebenwirkung (a ändert seinen Wert) ist wichtig.

+0

Wenn die Auswertung beginnt? Vor oder nach oder zur gleichen Zeit der Ausführung? – haccks

3

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 mich nicht zu sehr um den Unterschied kümmern.

Um zu verdeutlichen: grob, eine Anweisung ist eine Zeile von Code, und ein Ausdruck ist, was Sie in Klammern in einem if() oder while() oder auf der rechten Seite eines Gleichheitszeichens finden können.

Zum Beispiel int x = 2 + 3; ist eine Anweisung, die eine Variable x und weist er das Ergebnis des Ausdrucks 2 + 3, die 5 ist, erklärt.

+0

Wie viele Ausdrücke sind in 'x = y + z;'? Der zweite Para ist irreführend. – haccks

+0

Aber 'int x = 2 + 3' ist ein Ausdruck. – Bauss

+0

@hacks: Ich denke im dritten Absatz habe ich erklärt, was ich meinte. Ich versuche nicht 100% ig genau zu sein, sondern Dinge einfach zu erklären. In Ihrem Beispiel sind technisch sowohl "y" als auch "z" Ausdrücke, aber ich würde sagen, es würde mehr Sinn machen, sie so zu benennen, dass sie, wenn sie Funktionen wären, wie "x = y() + z();". Wenn sie Zahlen sind, erscheint es mir zuviel, sie Ausdrücke zu nennen. Und in diesem spezifischen Kontext würde ich nicht sagen, dass die vollständige 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. –

0

Die Art und Weise, wie ich daran gedacht habe, ist: Der Ausdruck Ausdruck wird von der mathematischen Terminologie übernommen. Die Evaluierung ist defined as:

bewerten

zu bewerten, ist der Wert eines numerischen oder algebraischen Ausdruck zu finden.

Ausdrücke haben die following definition: (Fettdruck hinzugefügt zur Betonung)

einen Ausdruck in einer Programmiersprache ist eine Kombination aus einer oder mehreren expliziten Werte, Konstanten, Variablen, Operatoren und Funktionen, die Die Programmiersprache interpretiert (gemäß ihren besonderen Regeln der Präzedenz und der Assoziation) und berechnet, um einen anderen Wert zu erzeugen ("in einer zustandsbehafteten Umgebung zurückzukehren").

In der Programmierung besteht praktisch jede Aussage (oder jede Aussage, die es wert ist geschrieben zu werden) aus vielen Ausdrücken. Ich habe immer Auswertung verwendet, um auf die Berechnung dieser Ausdrücke und Ausführung beziehen sich auf die Berechnung der gesamten Anweisung beziehen. Dies fällt oft mit Unterschieden zwischen Rückgabewert und Nebenwirkungen zusammen. Full Statements haben normalerweise Nebenwirkungen und Ausdrücke geben normalerweise einen Wert zurück.

+0

Danke für die Antwort rhmh! Übrigens, findet die Ausführung vor der Auswertung von Ausdrücken statt? – Jin

+1

@jwqwerty Ich bin nicht gut in Compiler-Semantik, aber wenn ein Ausdruck Teil einer Anweisung ist, muss es ausgewertet werden, um die Funktion auszuführen. Es könnte jedoch argumentiert werden, dass die Ausführung begonnen hat, indem die Komponenten bewertet wurden. Statt vorher oder nachher würde ich sagen, dass die Evaluierung während der Ausführung stattfindet. – rtmh