2010-08-06 14 views
8

Supongamos que quiero compartir un conjunto global de datos a través de mi programa, por ejemplo:¿Cómo escribir correctamente las declaraciones de matrices extern (y matrices dobles) en los archivos de cabecera de C?

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

¿Cuál es la correcta declaración extern para esta matriz en el archivo de cabecera C?

también qué pasa con una serie como esta:

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

En mi archivo de cabecera He intentado esto:

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

Pero esto resulta en errores de compilación:

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

que pueda no lo resuelvas

Gracias, Boda Cydo.

+0

Se puede publicar los contenidos de 'water.h' al menos hasta la línea 5 y mostrar qué línea está causando el error. –

+0

Charles, es #ifndef, #define, una nueva línea y 'extern int lookup_indexes [];' (4ª línea) y 'extern int double_indexes [] [5];' (5ª línea). – bodacydo

+0

tenía la intención de ponerlo en su pregunta. Solo agrégalo. – detly

Respuesta

6

This enlace analiza los problemas con matrices y tamaños utilizados como externos y cómo gestionarlos.

  1. Declare una variable de compañía, que contiene el tamaño de la matriz, definida e inicializado (con sizeof) en el mismo archivo de origen, donde la matriz se define
  2. definir una constante de manifiesto para el tamaño de modo que pueda ser usado consistentemente en la definición y la declaración extern

  3. utilizan algún valor centinela (típicamente 0, -1, o NULL) en último elemento de la matriz, por lo que el código puede determinar el final sin una indicación de tamaño explícita
+0

+1 por mencionar el tamaño de la matriz. El compilador simplemente no tiene información sobre el tamaño de la matriz si no se declara explícitamente en el archivo de encabezado – chrmue

+0

. No creo que este sea el problema o la pregunta del OP: no quiere saber el tamaño de sus matrices, él solo quiere declararlos adecuadamente. Los enlaces C-FAQ siempre son buenos, por supuesto. – schot

2

El código que publicó me parece bien y compila (gcc -std=c99 -pedantic y gcc -std=c90 -pedantic) en mi máquina. ¿Ha copiado y pegado estas líneas o podría haber hecho un error tipográfico en su encabezado real?

Ejemplo errores tipográficos que podrían hacer que su error (puras conjeturas):

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

Gracias, déjame verificar. – bodacydo

Cuestiones relacionadas