Die if-Anweisung zur Steuerung in C
Semantik (Verhalten) der bedingten Ausführung
- Syntax-Diagramm
Anweisung
.--. .--. .----------. .--. .-----------.
--->( if )--->( ( )--->| Ausdruck |--->( ) )--->| Anweisung |--->
'--' '--' '----------' '--' '-----------'
Bei der Ausführung einer Anweisung dieser Art wird zunächst der Ausdruck ausgewertet.
Die innere Anweisung wird genau dann ausgeführt, wenn der Ausdruck eine Zeichenfolge ist oder die Auswertung einen anderen Wert als »0« oder »0.0« ergab.
Daher bezeichnen wir den Ausdruck auch als die Bedingung und die innere Anweisung als die Konsequenz der if-Anweisung.
Wahrheitskontexte
Man sagt auch, daß der Ausdruck in einem Wahrheitskontext ausgewertet werde, weil bei der Verwendung des Werts des Ausdrucks nur die beiden Möglichkeiten „Null“ oder „nicht Null“ unterschieden werden, die oft als „falsch“ beziehungsweise „wahr“ interpretiert werden. Ein Zeichenfolgenliteral gilt dabei immer als „wahr“. Mit dieser Sprechweise kann man dann einfach sagen:
Die innere Anweisung wird genau dann ausgeführt, wenn der Ausdruck wahr ist.
Beispiele
Das folgende Beispiel zeigt, wie die innere Anweisung nur dann ausgeführt wird, wenn der Ausdruck nicht gleich »0« ist.
main.c
#include <stdio.h>
int main( void )
{ if( 0 )printf( "%d\n", 0 );
if( -2 )printf( "%d\n", -2 ); }stdout
-2
Die Anweisung wird also nur unter einer bestimmten Bedingung ausgeführt – sie wird bedingt ausgeführt.
Übungsfragen
? Übungsfrage
Welche Ausgabe erzeugt das folgende Programm?
main.c
#include <stdio.h>
int main( void )
{ if( 0 )printf( "A\n" ); printf( "B\n" );
if( 1 )printf( "C\n" ); printf( "D\n" ); }
? Übungsfrage
Welche Ausgabe erzeugt das folgende Programm?
main.c
#include <stdio.h>
int main( void )
{ if( -7 )printf( "A\n" ); printf( "B\n" );
if( 0 )printf( "C\n" ); printf( "D\n" );
if( +3 )printf( "E\n" ); printf( "F\n" ); }
Zeichenfolgenliteral als Ausdrücke *
Das folgende Beispiel zeigt, daß die innere Anweisung immer ausgeführt wird, wenn der Ausdruck ein Zeichenfolgenliteral als Wert hat.
main.c
#include <stdio.h>
int main( void )
{ if( "" )printf( "%s\n", "(leer)" );
if( "a" )printf( "%s\n", "a" );
if( "0" )printf( "%s\n", "0" ); }stdout
(leer)
a
0
Zeichenfolgenliteral spielen an dieser Stelle in der Praxis allerdings keine Rolle.