2016-11-23 10 views
0

Ich stieß auf dieses Stück Code. Es gibt keinen Fehler, aber was genau bedeutet es?Was bedeutet int A [] = {} in C?

int A[]={}; 

EDIT: Ich hatte diesen Beitrag zu bearbeiten, da einige von Ihnen für den Kontext, Compiler gefragt und so weiter ..

Ich weiß nicht viel über Compiler, aber ich schaffte es die Version gefunden ich bin mit "gcc (tdm-1) 4.9.2".

Ich habe den Code selbst ausprobiert und es lief richtig, ich konnte auch auf dem Array lesen und schreiben. Meine Frage ist: Was genau passiert, wenn ich ein solches Array deklariere?

+1

ein leeres Array ... – Rahul

+4

Ist das sogar kompilieren ??? –

+2

Es ist ein Grammatikfehler. Eine Initialisiererliste darf nicht leer sein. – Olaf

Antwort

0

Es definiert ein leeres Array vom Typ int.

+5

Es ist nicht Standard C. – Olaf

4
int A[]={}; 

ist in C ungültig. Leere Initialisierer sind nicht gültig. Siehe C11 draft, 6.7.9 Initialization.

+1

Es gibt so viele Compiler, geschrieben auf so viele verschiedene Standards (oder keinen Standard bei alles) dass die Aussage "in C illegal ist" macht keinen praktischen Sinn. Sie müssen mindestens den Namen eines Standards angeben. Schlagen Sie vor, den Namen des Standards hinzuzufügen, auf den Sie im nächsten Satz Bezug genommen haben. –

+0

@ T.E.D. Der Link, den ich hinzugefügt habe (C11-Entwurf), klärt ihn (jede mögliche Unklarheit), glaube ich, ausreichend. – usr

+3

@ T.E.D. Wenn die Frage mit einem Tag versehen ist [c], ohne die Plattform- oder Standardversion zu erwähnen, gehen wir davon aus, dass sich diese Frage auf die neueste Version des C-Standards bezieht. – user694733

0

Sie sollten mehr Kontext anzeigen und erwähnen, welcher Compiler verwendet wurde.

Ich glaube nicht, dass Code mit einem standardkonformen Compiler kompiliert, die leere Initialisierungsliste macht es ungültig.

+2

Die leeren Klammern '[]' sind hier nicht das Problem. – Olaf

+0

@Olaf Richtig, habe ich für Klarheit bearbeitet. Vielen Dank. – unwind

+3

Ehm, ein leerer Initialisierer ist immer falsch. Nennen Sie es einen Fehler im Standard (ich denke, es wäre einfach und nützlich), aber so ist es. – Olaf

2

Es bedeutet nichts, es C.

nicht gültig ist

C11 6.7.9 besagt, dass die beiden folgenden Formen sind gültig:

{ initializer-list } 
{ initializer-list , } 

wo initializer-list als einer der folgenden definiert:

designationopt initializer 
initializer-list , designationopt initializer 

Dies könnte entweder ein Zuweisungsausdruck oder ein C99-Initialisierer sein. Eine leere Initialisierungsliste ist keine gültige Syntax.