Dynam. Array zeigt Visual Studio nicht als solches an.
-
Ich bin mir nicht sicher, ob der blöde gcc da meckert.
Oder würde erint arr[5]; arr [5] = 1;
auch anmeckern?
-
Belli schrieb:
Ich bin mir nicht sicher, ob der blöde gcc da meckert.
Oder würde erint arr[5]; arr [5] = 1;
auch anmeckern?
nein, ein compilefehler gibt's hier nicht, aber ich nehme an, einen 'off-by-one' fehler, der zur laufzeit passiert bei:
int a[0]; a[0] =1;
-
char vorher[8]; char arr[0]; char nachher[8]; arr[0] = 42; printf("%d\n", arr[0]); printf("vorher: %d, arr: %d, nachher: %d", vorher, arr, nachher);
Geht durch, ohne Warnungen wegen arr.
Ausgabe:42 vorher: 2293608, arr: 2293584, nachher: 2293576
Bin aber gerade draufgekommen, daß auf meiner Windows-Kiste der Compiler schon 4 Jahre alt ist...
Das ist noch der von Dev-Cpp: gcc (GCC) 3.4.2 (mingw-special)
Werd mal nachsehen, was ein neuerer dazu sagt...
-
ich habs grad mal auf 'nem 1/2 jahr alten linux/debian probiert. das programm schmiert ab (bus error).
-
^^ GCC version 4.1.2
-
Dass der gcc bei
T foo[0]
nicht standardmäßig warnt liegt daran, dass es ein Feature ist um einen Mechanismus wie die in C99 neuen "flexible array members" schon vor C99 (und auch in C++) zu "unterstützen". Mit einem -pedantic warnt der gcc das aber sicher an.
-
Dass der gcc bei T foo[0] nicht standardmäßig warnt liegt daran, dass es ein Feature ist um einen Mechanismus wie die in C99 neuen "flexible array members" schon vor C99 (und auch in C++) zu "unterstützen". Mit einem -pedantic warnt der gcc das aber sicher an.
So ist es:
main.c:8: warning: ISO C forbids zero-size array `arr'
It's a feature!
Danke jedenfalls.FSFE hin oder her:
Langsam geht mir mein gcc schon auf die Nerven: ich hätte manchmal doch gerne einfach
einen Schalter, der bedeutet: "Ich bin dummer N00b, pass auf mich auf!"
-
bgdnoy schrieb:
Langsam geht mir mein gcc schon auf die Nerven
man muss den gcc ja nicht unbedingt benutzen. meistens gibt es bessere alternativen, ausser vielleicht unter unixoiden systemen.
-
naja, die Deklaration von unsigned char[0] ist nicht so ungewöhnlich. macht man normalerweise, wenn man Datenpakete variabler Länge hat.
Bsp:
struct MyPacket { uint32 type; uint32 length; uint8 data[0]; }
Hab ich schon oft in µC und DSP Headern gesehen.
wahrscheinlich gibt der gcc deswegen auch keinen Warnung aus, weil sich sonst ne menge Leute aufregen würden, sinnvoll wärs in meinen Augen schon.
-
Danke für eure Antworten.
Wie seiht es aus, wenn ich ein 2D-Array so dynamisch erzeugen lasse.
arr,10,10 funktioniert leider nicht, umd Visual Studio zu zwingen, es wie ein 10x10 Array anzuzeigen.