Programmiersprache C/C++

Komma-Operator

  ausdruck_1, ..., ausdruck_n
Die Ausdrücke werden von links nach rechts ausgewertet.
Ein solcher Komma-Ausdruck kann überall dort stehen, wo ein Ausdruck zulässig ist.

Anwendung findet dies mitunter bei der Formulierung von for-Anweisungen.

Beispiel:
Aufbau einer Einheitsmatrix

  #include <stdio.h>

  int main(void)
  {
    int a[3][3];
    int i, j;

    for ( i=0; i<3; i++ )
    for ( j=0; j<3; j++ )
      a[i][j] = 0;

    for ( i=0, j=0; i<3, j<3; i++, j++ )
      a[i][j] = 1;

    for ( i=0; i<3; i++ ) {
      for ( j=0; j<3; j++ )
        printf("%d ", a[i][j]); 
      printf("\n");
    }

    return 0;
  }
Ein etwas exotischeres Beispiel:
  #include <stdio.h>

  void output(int a, int b, int c)
  {
    printf("a = %d, b = %d, c = %d\n", a, b, c);
  }

  int main(void)
  {
    int x = 4, y = -8, z = 2;

    output(x, y, z);
    output(x, (z=2*z, -z), z);
    output(x, y, z);

    z = (x=7, x+1);
    output(x, y, z);

    return 0;
  }
Interessant ist, welcher Wert für c beim zweiten Aufruf von output ausgegeben wird. Hier zeigt sich bei verschiedenen C-Systemen unterschiedliches Verhalten !
gcc unter DOS
  a = 4, b = -8, c = 2
  a = 4, b = -4, c = 2
  a = 4, b = -8, c = 4
  a = 7, b = -8, c = 8
MSC 6.0 unter DOS
  a = 4, b = -8, c = 2
  a = 4, b = -4, c = 4
  a = 4, b = -8, c = 4
  a = 7, b = -8, c = 8
MSCV 1.0 unter Windows
  a = 4, b = -8, c = 2
  a = 4, b = -4, c = 2
  a = 4, b = -8, c = 4
  a = 7, b = -8, c = 8
Hinweis:
Im obigen Beispiel ist
  output(x, (z=2*z, -z), z);
ein Aufruf von output mit drei Aufrufparametern.
  output(x, z=2*z, -z, z);
wäre ein (unzulässiger) Aufruf mit vier Parametern !


Zurück zum Menü
Zurück zur vorigen Seite Weiter zur nächsten Seite

P. Böhme, 24.12.1995