Wirkfunktionen im Ausgaberahmen in C (Wirkfunktionen im Ausgaberahmen in C), Lektion, Seite 722928
https://www.purl.org/stefan_ram/pub/wirkfunktionen_c (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
C-Kurs

Wirkfunktionen in C 

Ein einführendes Beispiel

Die Auswertung eines Aufrufs der Funktion »putchar« liefert in der Regel den Wert des Argument  als Ergebnis. Daher ergibt eine Auswertung des Ausdrucks »putchar( 86 )« in der Regel wieder den Wert »86«. Das folgende Programm gibt diesen Wert aus.

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", putchar( 86 )); }

stdout
V86

Die Auswertung des Ausdrucks »putchar( 86 )« hat aber auch noch eine Wirkung, nämlich die Ausgabe des Zeichens 86.

Auf einer C -Implementation sind alle Zeichen durchnumeriert. Welches Zeichen die Nummer 86 hat, hängt vom Rechner ab, auf dem das Programm ausgeführt wird. Wir nehmen hier ein »V« an. Dementsprechend sieht man in der Ausgabe zuerst ein »V«. Die Ausgabe dieses »V« ist die Wirkung  der Auswertung des Ausdrucks »putchar( 86 )«.

Zeichentabelle (Auszug)

Zahl Zeichen

85  U
86  V
87  W 

Wirkungen

Dinge können sich im Laufe der Zeit verändern. Man denke beispielsweise an eine Uhr, deren Zeiger ihre Position relativ zum Ziffernblatt verändern.

Wenn wir die Fähigkeit zur Veränderung bei einem Ding betonen wollen, so nennen wir dieses Ding auch ein System. Ein (physikalisches) System  ist also ein physikalisches Ding, das grundsätzlich zur Veränderung fähig ist.

Das, was sich bei einem System verändern kann, nennen wir den Zustand  (des Systems). Der Zustand einer Uhr ist beispielsweise durch die Positionen ihrer Zeiger gegeben.

Wir sehen manchmal einen bestimmten Eingriff  als ursächlich  für die Veränderung eines Zustands an und sagen dann, die Veränderung eine Wirkung  des Eingriffs sei. Wenn eine Uhr beispielsweise durch Drehen eines außen am Gehäuse angebrachten Rades auf eine andere Zeit umgestellt wird, dann sagen wir, daß die Veränderung der angezeigten Zeit die Wirkung  des Drehens sei (vom Drehen bewirkt  wurde).

In C  kann die Auswertung eines Ausdrucks eine Wirkung haben.

Eine Wirkung wird durch ein Verb (genauer: eine Verbalphrase oder einen Satz) beschrieben, nicht durch ein Substantiv (genauer: eine Nominalphrase).

Die Wirkung  einer Auswertung eines Ausdrucks ist jede Veränderung, welche diese Auswertung laut der Dokumentation herbeiführt.

Eine Wirkung muß nicht unbedingt sofort beobachtbar sein, sie kann sich auch versteckt im Inneren des C -Implementation abspielen, es genügt, wenn sie in der Dokumentation beschrieben ist.

Ein Ausdruck, dessen Auswertung eine Wirkung hat, nennen wir Wirkausdruck.

Die Ausgabe als Wirkung

Ein Ausgabe  ist eine Wirkung.

Eine Ausgabe  ist eine Wirkung, da sie den Zustand der Schreibfläche (des Ausgabegerätes) verändert, sie verändert also einen Zustand.

Die Ausgabe des Numerales 86 in dem obigen Programm gilt nicht  als Wirkung der Auswertung des Aufrufausdrucks »putchar( 86 )«, weil sie erst nach  dem Abschluß dieser Auswertung durch den Ausdruckrahmen erfolgt. Es handelt sich zwar auch um eine Wirkung, aber sie gehört nicht zu dem Ausdruck »putchar( 86 )«.

Werte und Wirkungen

Die Festlegung eines Rückgabewerts gilt nicht  als Wirkung.

Die Auswertung des Ausdrucks »cos( 0 )« hat beispielsweise keine Wirkung, da sie nichts weiter macht als einen Ergebniswert zu ermitteln.

Symbolisch kann man dies mit der folgenden Merkformel festhalten:

Wert Wirkung

Verhalten

Wirkung und Wert  der Auswertung eines Funktionsaufrufausdrucks gemeinsam  bezeichnen wir als das Verhalten  dieser Auswertung.

Symbolisch kann man dies mit der folgenden Merkformel festhalten:

Verhalten = Wert + Wirkung

Das Verhalten einer Funktion  (also das Verhalten der Auswertung eines Aufrufs dieser Funktion) ist in der Dokumentation dieser Funktion beschrieben.

Der Satz „Das Verhalten der Funktion ändert sich nicht.“ bedeutet beispielsweise, daß weder der Wert noch die Wirkung der Funktion sich verändert.

Rückgabe  und Ausgabe 

Man beachte die unterschiedliche Bedeutung von „Rückgabe“ und „Ausgabe“ sowie von „zurückgeben“ und „ausgeben“: Eine Funktion  gibt einen Wert zurück. Eine Ausgabeanweisung  gibt einen Wert aus. Die Rückgabe  eines Wertes ist ein programminterner Vorgang, der nicht  als eine Wirkung angesehen wird. Bei der Ausgabe  eines Wertes wird eine Information vom Programm nach außen  gegeben, und die Ausgabe wird als Wirkung angesehen.

Daneben gibt es noch das Wort „angeben“: Eine Wertausdruck, der keine Methode ist, gibt seinen Wert an, aber nicht zurück. So gibt der Ausdruck »86« beispielsweise den Wert »86« an. Neben „angeben“ verwendet man aber auch andere Verben dafür. Man sagt beispielsweise auch einfach, daß der Ausdruck »86« den Wert »86« habe.

Auswertung mit bekannter Reihenfolge

In diesem Beispiel zeigen wir die einzelnen Operationen, die während der Auswertung des Ausdrucks »putchar( putchar( 86 )+ 1 )« ausgeführt werden.

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", putchar( putchar( 86 )+ 1 )); }

Protokoll
VW87
Codierung

83 S
84 T
85 U

86 V

87 W
88 X
89 Y

Operation 0 »putchar( 86 )«
Wert 86
Wirkung Ausgabe von »V«
Operation 1 »86 + 1«
Wert 87
Operation 2 »putchar( 87 )«
Wert 87
Wirkung Ausgabe von »W«
Auswertung von »putchar( putchar( 86 )+ 1 )« (insgesamt)
Wert 87
Wirkung Ausgabe von »VW«

Übungsfragen

?   Ausgaben

Dokumentation der Funktion »putchar« (vereinfacht und übersetzt)
Synopsis
#include <stdio.h>
int putchar( int c );
Schreibt das Zeichen mit der Kennzahl c und
gibt in der Regel den Argumentwert c zurück.

Die Bedeutung des Wortes “schreibt ” stellt klar, daß die Auswertung eines Aufrufs dieser Funktion eine Wirkung hat und nicht nur einen Wert ermittelt.

?    Ergebnistyp
Welchen Typ hat ein Aufruf der Funktion »putchar«?
?    Parametertyp
Welchen Typ hat der Parameter der Funktion »putchar«?
?    Wirkung
Welche Wirkung hat die Auswertung eines Aufrufs der Funktion »putchar«?

?   Ausgaben

Für die folgenden Übungsfragen wird die folgende Codierung (Zuordnung von Kennzahlen zu Zeichen) vorausgesetzt.

Codierung

83 S
84 T
85 U

86 V

87 W
88 X
89 Y

Welche Ausgabe erzeugt das folgende Programm?

(84: T, 85: U, 86: V, 87: W, 88: X)

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", putchar( 86 + 1 )); }

Welche Ausgabe erzeugt das folgende Programm?

(84: T, 85: U, 86: V, 87: W, 88: X)

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", putchar( 86 )+ 1 ); }

Welche Ausgabe erzeugt das folgende Programm?

(84: T, 85: U, 86: V, 87: W, 88: X)

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", putchar( 86 + 1 )- 1 ); }

Welche Ausgabe erzeugt das folgende Programm?

(84: T, 85: U, 86: V, 87: W, 88: X)

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", putchar( putchar( 86 )) ); }

Welche Ausgabe erzeugt das folgende Programm?

(84: T, 85: U, 86: V, 87: W, 88: X)

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", putchar( putchar( 86 + 1 )- 1 ) ); }

Welche Ausgabe erzeugt das folgende Programm?

(84: T, 85: U, 86: V, 87: W, 88: X)

main.c

#include <stdio.h>

int main( void )
{ printf
( "%d\n", putchar( putchar( 86 + 1 )- 1 )+ 1 ); }

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram722928 stefan_ram:722928 Wirkfunktionen im Ausgaberahmen in C Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd722928, slrprddef722928, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/wirkfunktionen_c