256Fermer258
SallyLe 21/04/2009 à 14:41
Folco (./252) :
:struct Misc DrawingData = //default value. { ... };ensuite, dans main(), j'ai l'initialisation de la structure
Attention ! (tu as testé ton programme ? je suppose que non)
Ce que tu fais là n'est pas une affectation simple, c'est une déclaration de variable (parce qu'il y a un type). Une déclaration de variable dans une fonction, ça crée une variable locale ! donc si tu as effectivement écrit ça dans main, ça crée une variable locale qui s'appelle DrawingData, et ça ne touche pas à la variable globale qui a le même nom (et ensuite tant que tu restes dans le scope de cette déclaration, c'est-à-dire dans le corps de main(), DrawingData désignera ta variable locale, et la globale sera donc inaccessible).

Si ce que tu veux faire est juste initialiser ta variable globale, il ne faut pas la redéclarer. Il faut simplement lui affecter sa valeur initiale. Concrètement, il faut enlever le "struct Misc", ainsi DrawingData sera reconnu comme une référence à quelque chose qui a été déclaré avant, et non comme une nouvelle variable.


Sinon petite précision sur ce que dit Ximoon : la différence qu'il fait entre les .c et les .h est la suivante : le code qui n'a aucun effet (il donne des informations au compilateur, mais ne se traduit par rien après compilation. Il peut donc sans problème être inclus dans plusieurs fichiers .c différents, sans risque de duplication de code dans le résultat de la compilation.) est dans des .h. C'est le cas des déclarations extern, qui disent en gros « une variable de tel nom et de tel type existe » (après quand il s'agira de la trouver le linker se débrouillera — ou pas, auquel cas tu auras une erreur)

Le code qui fait quelque chose (aura une traduction assembleur) est dans des .c, qui ne sont pas censés être inclus dans autre chose. Ici, il s'agit de la déclaration non-extern (qui crée effectivement la variable globale, et doit donc être unique), et aussi du code qui utilise la variable.
Folco (./252) :
et pareil, je veux faire de PlanesPtr une variable globale au programme, sans la passer en variable globale
confus