Systemnahe Programmierung in Chome Systemnahe Programmierung in C: Schleife über alle Elemente eines Feldes Prof. Dr. Uwe Schmidt FH Wedel

Schleife über alle Elemente eines Feldes

weiter

weiter

Iteration über alle Elemente eines Feldes
Beispiel: forall.c

   1#include <stdio.h>
   2
   3int list[] = { 13, 56, 23, 1, 89, 58, 20, 125, 86, 3 };
   4
   5#define listLength ( sizeof list / sizeof list[0] )
   6
   7int
   8main (void)
   9{
  10  int i;
  11
  12  for (i = 0; i < listLength++i)
  13    printf ("list[%d] = %d\n"ilist[i]);
  14
  15  return 0;
  16}
weiter

weiter

Übersetzen

cc -o forallTest -Wall forall.c

weiter

weiter

Testen

forallTest

weiter

weiter

NICHT:
Beispiel: WRONG-forall.c

   1#include <stdio.h>
   2
   3int list[] = { 13, 56, 23, 1, 89, 58, 20, 125, 86, 3 };
   4
   5#define listLength ( sizeof list / sizeof list[0] )
   6
   7int
   8main (void)
   9{
  10  int i;
  11
  12  for (i = 0; i <= listLength++i)
  13    printf ("list[%d] = %d\n"ilist[i]);
  14
  15  return 0;
  16}
weiter

weiter

? Was ist hier falsch?


weiter

Übersetzen

cc -o wrongForallTest -Wall WRONG-forall.c

weiter

weiter

Testen

wrongForallTest

weiter

weiter

Defensive Programmierung:
Beispiel: SAVE-forall.c

   1#include <stdio.h>
   2#include <assert.h>
   3
   4int list[] = { 13, 56, 23, 1, 89, 58, 20, 125, 86, 3 };
   5
   6#define listLength ( sizeof list / sizeof list[0] )
   7
   8#define indexCheck(i) ((unsigned)(i) < listLength)
   9
  10int
  11main (void)
  12{
  13  int i;
  14
  15  for (i = 0; i <= listLength++i) {
  16    assert(indexCheck(i));
  17
  18    printf ("list[%d] = %d\n"ilist[i]);
  19  }
  20
  21  return 0;
  22}
weiter

weiter

Übersetzen

cc -o saveForallTest -Wall SAVE-forall.c

weiter

weiter

Testen

saveForallTest

weiter

weiter

Fehlerhafte Programmierung:
Beispiel: BAD-forall.c

   1void
   2copy (int dst[]int src[]int len)
   3{
   4  int i;
   5  for (i = 0; i < len++i);
   6    {
   7      dst[i] = src[i];
   8    }
   9}
weiter

weiter

? Was ist hier falsch?


weiter

Übersetzen

cc -c -Wall BAD-forall.c

weiter

Letzte Änderung: 14.11.2011
© Prof. Dr. Uwe Schmidt
Prof. Dr. Uwe Schmidt FH Wedel