Rainer Weikusat
2015-11-16 21:01:56 UTC
In nicht allzu ferner Vergangenheit ist mir beim Betrachten von
switch (expression) statement
und gleichzeitigem Nachdenken uber Duffs Geraet der Gedanke gekommen,
dass switch eigentlich keine grosse Aehnlichkeit mit einer
Mehrwegeverzweigung a la "Pascal case" hat sondern einfach nur
ermoeglicht, die Ausfuehrung von statement an der Position einer
bestimmte Sprungmarke im Inneren davon beginnen zu lassen. ZB mit
folgendem, etwas widersinnig anmutendem Konstrukt:
---------
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
if (argc != 2) return 0;
i = atoi(argv[1]);
switch (i - 1)
if (i == 1) {
default:
puts("Im Labyrinth des Irrsinns");
} else if (i == 3) {
case 0:
puts("Oder in der Naehe davon");
} else {
case 2:
puts("Faellt nichts durch");
}
return 0;
}
----------
oder als Alternativmethode um eine Schleife in der Mitte zu beginnen:
----------
#include <stdio.h>
int main(int argc, char **argv)
{
if (!*++argv) return 0;
switch (0) do {
fputs(", ", stdout);
default:
fputs(*argv, stdout);
} while (*++argv);
fputc('\n', stdout);
return 0;
}
----------
switch (expression) statement
und gleichzeitigem Nachdenken uber Duffs Geraet der Gedanke gekommen,
dass switch eigentlich keine grosse Aehnlichkeit mit einer
Mehrwegeverzweigung a la "Pascal case" hat sondern einfach nur
ermoeglicht, die Ausfuehrung von statement an der Position einer
bestimmte Sprungmarke im Inneren davon beginnen zu lassen. ZB mit
folgendem, etwas widersinnig anmutendem Konstrukt:
---------
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char **argv)
{
int i;
if (argc != 2) return 0;
i = atoi(argv[1]);
switch (i - 1)
if (i == 1) {
default:
puts("Im Labyrinth des Irrsinns");
} else if (i == 3) {
case 0:
puts("Oder in der Naehe davon");
} else {
case 2:
puts("Faellt nichts durch");
}
return 0;
}
----------
oder als Alternativmethode um eine Schleife in der Mitte zu beginnen:
----------
#include <stdio.h>
int main(int argc, char **argv)
{
if (!*++argv) return 0;
switch (0) do {
fputs(", ", stdout);
default:
fputs(*argv, stdout);
} while (*++argv);
fputc('\n', stdout);
return 0;
}
----------