Mittwoch, 15. Oktober 2008
Das erinnert mich daran warum ich die Sprache C nach Möglichkeit nur auf Mikrocontrollern benutze:
rschaten% cat array.c
#include <stdio .h>
int main(int argc, char **args) {
char *string = "abc";
printf("%c %c %cn", string[0], string[1], string[2]);
printf("%c %c %cn", 0[string], 1[string], 2[string]);
return 0;
}
rschaten% gcc -o array array.c
rschaten% ./array
a b c
a b c
rschaten%
Das habe ich aus dem Unix Haters Handbook, ich hätte nicht gedacht dass das wirklich funktioniert…
Mittwoch, 18. Juni 2008
Ich bin auf ein merkwürdiges Phänomen in C gestoßen, vielleicht kann mir das jemand erklären. Extrem eingedampft sieht das Problem so aus:
int main(int argc, char* arg[]) {
int i = 0;
switch (i) {
case 0:
int j = 7;
break;
}
}
Der Compiler (aufgerufen mit ‘gcc test.c’) sagt dazu “t.c:5: error: expected expression before ‘int’“. Mit geschweiften Klammern funktioniert der case-Block dagegen prima:
case 0: {
int j = 7;
break;
}
Zu meinem grössten Erstaunen klappt auch folgender Block:
case 0:
i = 3;
int j = 7;
break;
Es geht halt nur nicht wenn direkt nach dem case eine Variablendeklaration kommt.
Wenn man schon innerhalb eines case eine Variable deklarieren kann… warum dann nicht ganz am Anfang? Ich meine: ich habe ja Lösungen für das Problem. Mir fehlt halt nur das ‘Problembewusstsein’. Kann mir das jemand vermitteln?