2010-09-11 9 views
1

J'écris du C et j'ai une table de consultation des ints. Je suis un peu rouillé ... où dois-je déclarer et initialiser le tableau pour pouvoir l'utiliser dans plusieurs fichiers C? Puis-je le déclarer dans un fichier H et l'initialiser dans un fichier C?Où puis-je définir ma matrice de const dans C?

+0

Cette question mérite-t-elle d'être suivie ou devrais-je la supprimer? –

Répondre

2

Si je comprends bien, oui, vous pouvez le faire. Lire quelque chose sur

extern static 

mots-clés.

+0

Merci, c'est l'indice dont j'avais besoin. –

+1

Je pense que l'OP signifie "statique" d'une certaine manière, cela ne corrèle pas bien avec la signification du mot-clé "statique" dans le langage C :). –

+0

J'ai posté les deux car ils se réfèrent tous deux à la visibilité d'une variable en langage C - extern scope pour oher fichiers ou le rendre statique dans le fichier, il apparaît. –

1

Vous pouvez le déclarer dans un fichier d'en-tête avec extern et le définir dans l'un de vos fichiers source. Cependant, par définition, il ne peut pas être également static.

2

Vous définissez le tableau dans un fichier C et le déclarez comme extern dans un autre.

Une erreur courante consiste à assimiler le tableau avec un pointeur, et faire quelque chose comme:

// file1.c: 
int array[] = { 1,2,3,4}; 

// file1.h: 
extern int *array; 

// file2.c: 
#include "file1.h" 

// use array 

Ce sera pas travail. Vous pouvez traiter le nom d'un tableau comme un pointeur dans certaines situations, mais c'est et non l'un d'entre eux. [Edit: La bonne chose à faire est quelque chose comme:

// file1.h: 
extern int array[]; 
+0

Mais cela fonctionne si vous changez 'extern int * array;' en 'extern int array [];'. –

+0

@R: droit - maintenant que vous le mentionnez, il n'est probablement pas si bon que ma réponse parle de ce qu'il faut éviter, mais * pas * comment le faire correctement. –

+0

"si bon" est une chose subjective, mais si vous ne l'avez pas édité, vous n'obtiendrez pas mon upvote :) –