2010-08-06 9 views
8

Supponiamo che voglio condividere una gamma globale di dati attraverso il mio programma, ad esempio:Come scrivere correttamente le dichiarazioni degli array esterni (e dei doppi array) nei file di intestazione di C?

int lookup_indexes[] = { -1, 1, 1, -1, 2, 1, 1, -2, 2, 2, -1, 1, 1, 2 }; 

Qual è la corretta extern dichiarazione per questo array nel file di intestazione C?

anche per quanto riguarda una serie come questa:

int double_indexes[][5] = { { -1, 1, 1, -1, 1 }, { 2, -2, 2, 1, -1 } }; 

Nel mio file di intestazione ho provato questo:

extern int lookup_indexes[]; 
extern int double_indexes[][5]; 

Ma questo si traduce in errori di compilazione:

water.h:5: error: array type has incomplete element type 

posso lo capisco.

Grazie, Boda Cydo.

+0

Puoi pubblicare il contenuto di 'water.h' almeno fino alla linea 5 e spettacolo che la linea causa l'errore. –

+0

Charles, è #ifndef, #define, una nuova riga e 'extern int lookup_indexes [];' (quarta riga) e 'extern int double_indexes [] [5];' (quinta riga). – bodacydo

+0

intendeva metterlo nella tua domanda. Basta accenderlo. – detly

risposta

6

This collegamento discute i problemi con gli array e le dimensioni utilizzati come extern e come gestirli.

  1. dichiarare una variabile guidata, contenente la dimensione della matrice, definito e inizializzato (con sizeof) nello stesso file di origine in cui la matrice è definita
  2. definire una costante manifesta per le dimensioni in modo che possa essere utilizzato in modo coerente nella definizione e la dichiarazione extern

  3. Uso certo valore sentinella (tipicamente 0, -1, o NULL) in ultimo elemento dell'array, in modo che il codice può determinare la fine senza indicazione esplicita dimensione
+0

+1 per menzionare la dimensione dell'array. Il compilatore semplicemente non ha informazioni sulla dimensione dell'array se non è dichiarato esplicitamente nel file di intestazione – chrmue

+0

Non credo che questo sia il problema o la domanda dell'OP: Non vuole sapere la dimensione dei suoi array, vuole solo dichiararli correttamente. Collegamenti le C-FAQ sono sempre buone naturalmente. – schot

2

Il codice che hai postato mi sembra soddisfacente e compila (gcc -std=c99 -pedantic e gcc -std=c90 -pedantic) sulla mia macchina. Hai copiato queste righe o hai fatto un refuso nella tua vera intestazione?

esempio errori di battitura che potrebbero causare l'errore (congettura puro):

extern int double_indexes[][]; /* forgot the 5 */ 
extern int double_indexes[5][]; /* [] and [5] swapped */ 
+0

Grazie, fammi verificare. – bodacydo

Problemi correlati