Definiert ein leeres array in c

Was passiert eigentlich in folgendem Programm, ich habe ein leeres array int arr[]; im code und mit dem GCC-compiler, aber der compiler nicht einen Fehler. Es wird erfolgreich gearbeitet.

#include <stdio.h>
#include <stdlib.h>

typedef struct st
{
        int i;
        int arr[];
}ST,*ptr;

int main()
{
        ST s1;
        ptr p1= (ptr)malloc(sizeof(ST)+4*sizeof(int));

        p1->i=10;
        p1->arr[0]=1;
        p1->arr[3] = 1;

        printf("%d\n",p1->arr[3]);
        printf("%ld\n", sizeof(s1));
}

C Sprache nicht erlaubt undefined array-Länge. aber GCC-compiler erlaubt. Warum?

Einfach nur neugierig, was ist eigentlich passiert?

  • C-Norm dies zulässt. Suche für "flexible array member".
  • Flexible array member, zwei Vorschläge: don ' T cast malloc und verstecken sich nicht-Zeiger mit typedefs
  • Als das Letzte Element der Struktur, ist es nützlich, wenn die Struktur speichert eine variable Menge von Daten.
  • Ich danke Ihnen, sir, ich nicht bewusst mit diesem Thema..
  • Es ist ein C99-feature; nicht in out-of-date C-Compiler (insbesondere in einigen Versionen von Microsoft Visual Studio).
InformationsquelleAutor msc | 2016-08-25
Schreibe einen Kommentar