2013-08-05 28 views
8

C'è la dichiarazione extern int (x)[] alla fine dell'articolo this. Le parentesi stanno facendo qualcosa o sono solo per confusione?Qual è la differenza tra `extern int (x) []` e `extern int x []` in C?

La mia ipotesi sarebbe quella con parentesi x è un array di interi esterni (e questo è quello che dice l'articolo), ma senza quelli x sarebbe un array esterno di numeri interi. Se questo è vero, come sarebbero diverse le definizioni? Non sarebbero entrambi int x[]?

+1

"sono solo per confusione" – P0W

+0

Non è un array esterno di 'int's uguale a un array di' int's esterno? – alk

+1

Se stai cercando di leggere le dichiarazioni C, mi sento in dovere di menzionare la [Regola in senso orario/a spirale] (http://c-faq.com/decl/spiral.anderson.html). – ravron

risposta

6

No, i parenti non stanno facendo niente lì. L'articolo si collega a spiega perché:

Il modo più semplice per differenziare i due è di guardare il posizionamento dei committenti tipo. Se un identificatore di tipo segue immediatamente una parentesi sinistra , quella parentesi è l'inizio di un descrittore della funzione e il tipo è parte di un parametro di funzione. Le parentesi vuote indicano anche una funzione. Altrimenti le parentesi sono raggruppamento (forse inutilmente, ma è meglio avere troppe meno di troppo poche) l'espressione.

noti inoltre che "array di int esterni" e "array esterno di int" sono la stessa cosa - il "extern-ità" va sempre all'oggetto che viene dichiarata, che in questo caso è un array . Personalmente penso che il primo modo per descriverlo sia tecnicamente inaccurato e semplicemente confuso.

+0

Stavo per citare questo blocco EXACT dalla pagina. È un modo molto carino per dire cosa significano realmente le parentesi. :) –

+0

Grazie, ho letto quel blocco ma non sono riuscito a capire se questo era il caso non necessario :) –

+1

@Juris: ho modificato la risposta per chiarire un po 'cosa è esattamente esterno. – Jon

1

In questo caso le paraste non hanno alcun significato. Normalmente, si usa la para- resi per i puntatori di funzione o per contrassegnare un legame più forte, poiché tutti gli operatori hanno un diverso livello di rilegatura.
I contrassegni di parole chiave extern, questa è solo una dichiarazione, ma la definizione effettiva di questa matrice avverrà in un'altra parte.

Problemi correlati