web-dev-qa-db-fra.com

comment définir un tableau constant dans c/c ++?

Comment définir un tableau constant à 1 ou 2 dimensions en C/C++? Je traite avec une plateforme intégrée (Xilinx EDK), de sorte que les ressources sont limitées.

Je voudrais écrire dans le fichier d'en-tête tiers quelque chose comme

#define MYCONSTANT 5

mais pour le tableau. Comme

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

Quel est le moyen le plus courant de faire cela?

11
Andrey Pesoshin

Dans le fichier source C++

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

Dans le fichier d'en-tête à inclure dans le fichier source C et C++

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

En C++, le moyen le plus courant de définir un tableau constant devrait certainement être, erm, de définir un tableau constant

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

Avez-vous une raison de supposer qu'il y aurait un problème sur cette plate-forme intégrée? 

17
sbi

En C++

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

C'était assez facile, mais je ne comprends peut-être pas bien votre question. Ce qui précède ne fonctionnera pas en C, veuillez toutefois spécifier le langage qui vous intéresse vraiment. Il n’existe pas de langage tel que C/C++.

4
jahhaj

Il est impossible de définir la constante array à l'aide de la directive define.

2
undone

J'ai eu un problème similaire. Dans mon cas, j'avais besoin d'un tableau de constantes pour pouvoir utiliser la taille d'autres tableaux statiques. Quand j'ai essayé d'utiliser le

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

et ensuite déclarer:

int my_static_array[my_const_array[0]];

Je reçois une erreur de mon compilateur:

array bound is not an integer constant

Alors, finalement, j’ai fait ce qui suit (peut-être y at-il des moyens plus élégants de le faire):

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