2013-08-05 14 views
8

Es gibt eine Erklärung extern int (x)[] am Ende this Artikel. Machen die Klammern etwas oder sind sie nur für Verwirrung?Was ist der Unterschied zwischen `extern int (x) []` und `extern int x []` in C?

Meine Vermutung wäre, dass mit Klammern x ist ein Array von externen Ganzzahlen (und das ist, was der Artikel sagt), aber ohne diese x wäre ein externes Array von ganzen Zahlen. Wenn das stimmt, wie würden sich die Definitionen unterscheiden? Wären sie nicht beide int x[]?

+1

"sie sind nur für Verwirrung" – P0W

+0

Ist kein externes Array von 'int's das gleiche wie ein Array von externen' int's? – alk

+1

Wenn Sie sich damit befassen, wie man C-Deklarationen liest, fühle ich mich verpflichtet, die [Clockwise/Spiral Rule] (http://c-faq.com/decl/spiral.anderson.html) zu erwähnen. – ravron

Antwort

6

Nein, die Parens machen da nichts. Der Artikel, den Sie verknüpfen erklärt, warum:

Der einfachste Weg, die zwei ist, betrachten die Platzierung der Typdeklarierer zu unterscheiden. Wenn ein Typspezifikator unmittelbar auf eine linke Klammer folgt, ist diese Klammer der Anfang einer Funktion Deskriptor, und der Typ ist Teil eines Funktionsparameters. Leere Klammern bedeuten auch eine Funktion. Ansonsten sind die Klammern Gruppierung (vielleicht unnötig, aber es ist besser, zu viele als zu wenige) den Ausdruck zu haben.

Beachten Sie auch, dass „Array von externen ints“ und „externer Array von ints“ ist genau die gleiche Sache - die „extern-ness“ geht immer auf das Objekt deklariert wird, die in diesem Fall ein Array ist . Ich persönlich denke, der erste Weg, es zu beschreiben, ist technisch ungenau und einfach verwirrend.

+0

Ich wollte gerade diesen GENAUEN Block von der Seite zitieren. Es ist eine sehr schöne Art zu sagen, was die Klammern eigentlich bedeuten. :) –

+0

Danke, ich habe den Block selbst gelesen, konnte aber nicht herausfinden, ob das der unnötige Fall war :) –

+1

@ Juris: Ich habe die Antwort bearbeitet, um ein bisschen zu klären, was genau extern ist. – Jon

1

Die Paranthese hat in diesem Fall keine Bedeutung. Normalerweise verwenden Sie Paranthesis für Funktionszeiger oder für stärkere Bindungen, da alle Operatoren eine andere Bindungsstufe haben.
Das extern Schlüsselwort markiert, dass dies nur eine Deklaration ist, aber die eigentliche Definition dieses Arrays wird woanders passieren.