2011-07-31 46 views
11

¿Cómo se define la matriz constante de 1 o 2 dimensiones en C/C++? Manejo de plataforma integrada (Xilinx EDK), por lo que los recursos son limitados.cómo definir una matriz constante en c/C++?

Me gustaría escribir en tercera persona fichero de cabecera algo así como

#define MYCONSTANT 5 

pero por matriz. Como

#define MYARRAY(index) { 5, 6, 7, 8 } 

¿Cuál es la forma más común de hacer esto?

+0

A macro based La solución utilizada en el primer ejemplo no funcionaría. En algún lugar, una matriz real debe asignarse en la memoria, como en la respuesta de sbi –

+0

Por favor, elabore un poco. ¿Arreglo constante significa que no desea que la matriz se modifique en una etapa posterior u otra cosa? –

+0

@Aditya Kumar - eso es correcto. Quiero definir el conjunto de constantes en archivos separados y acceder a ellos usando el índice entero del archivo fuente principal. –

Respuesta

18

En C++ archivo fuente

extern "C" const int array[] = { 1, 2, 3 }; 

En el archivo de cabecera que se incluirá en el archivo de origen tanto C como C++

#ifdef __cplusplus 
extern "C" { 
#endif 
extern const int array[]; 
#ifdef __cplusplus 
} 
#endif 
17

En C++, la manera más común para definir una matriz constante sin duda debe ser, erm, definir una matriz constante:

const int my_array[] = {5, 6, 7, 8}; 

¿Tiene alguna razón para suponer que habría algún problema en esa plataforma incrustada?

+1

bien. ¿Y dónde definirlo - encabezado/archivo fuente? Cuando lo defino en un archivo h de terceros (es un controlador separado para el sistema de microprocesador) - me sale un error - algo así como "esta variable no se puede definir varias veces". –

+0

cuando lo defino en el archivo fuente - no se puede acceder desde el archivo main.cc (en el que incluyo mydriver.h) –

+2

¿Está escribiendo en C? Ha logrado elegir las pocas áreas donde el mismo código funcionará de forma diferente en C y C++, por lo que debe especificar qué idioma es – jahhaj

4

En C++

const int array[] = { 1, 2, 3 }; 

Eso era lo suficientemente fácil, pero tal vez no estoy entendiendo bien su pregunta. Lo anterior no funcionará en C, sin embargo, especifique en qué idioma está realmente interesado. No existe un lenguaje como C/C++.

+0

¿Por qué esto no funciona en C? Pensé que C había copiado 'const' de C++, ¿creo que C89? – sbi

+0

Si esto se colocó en un archivo de cabecera y ese archivo de cabecera se incluyó en más de un archivo fuente, en C obtendría múltiples errores de definición, en C++ no lo haría. Const no tiene exactamente el mismo significado en C y C++. – jahhaj

+0

para ser específico - mi aplicación consta en general de 2 partes - programa principal escrito en C++ y controlador de software central periférico escrito en C puro (como se compila como parte del paquete de soporte de la placa). –

1

Es imposible definir array constante usando la directiva define.

0

he tenido un problema similar. En mi caso, necesitaba una matriz de constantes para usar como tamaño de otras matrices estáticas. Cuando traté de utilizar el

const int my_const_array[size] = {1, 2, 3, ... }; 

y luego declarar:

int my_static_array[my_const_array[0]]; 

consigo un error de mi compilador:

array bound is not an integer constant 

Así que, finalmente hice lo siguiente (Tal vez hay formas más elegantes de hacerlo):

#define element(n,d) ==(n) ? d : 
#define my_const_array(i) (i) element(0,1) (i) element(1,2) (i) element(2,5) 0 
Cuestiones relacionadas