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?
Répondre
Les objets globaux doivent être déclarés dans un fichier .h et doivent être déclarés comme extern
, puis ils doivent être définis dans un fichier .c. Voir What's the best way to declare and define global variables and functions? de la FAQ de comp.lang.c.
Pour les tableaux, certains soins supplémentaires peuvent être nécessaires. Voir Q1.24 de la FAQ comp.lang.c aussi.
Si je comprends bien, oui, vous pouvez le faire. Lire quelque chose sur
extern static
mots-clés.
Merci, c'est l'indice dont j'avais besoin. –
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 :). –
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. –
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
.
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[];
Mais cela fonctionne si vous changez 'extern int * array;' en 'extern int array [];'. –
@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. –
"si bon" est une chose subjective, mais si vous ne l'avez pas édité, vous n'obtiendrez pas mon upvote :) –
Cette question mérite-t-elle d'être suivie ou devrais-je la supprimer? –