bonjour,
la question a été posé 100 fois, mais je galère:
J'ai un fichier principal, pleusieurs .h et plusieurs .cpp. Entre autre:
-fonction.cpp et fonction.h, avec les prototypes (ça c'est ok je crois)
-variables.cpp avec les variables: type var = x ;
-globales.h avec les defs des variables globales: extern type var ; (sinon fonction.cpp ne les trouve pas)
-et finalement je galère à faire reconnaitre mes #define dans un fichier define.h: soit il ne trouve pas les définitions, soit il me dit qu'elle sont déclarée deux fois (tous mes fichiers ont des #ifndef)
Je voulais simplifier la lecture et le travail sur mon code mais on peut légitimement se demander si c'est la meilleure solution?! Qu'en pensez-vous?
Merci hbachetti,
je n'ai pas mis le code car c'est plus une question de principe.
Concernant le découpage thématique, effectivement ça semble plus logique: du coup chaque thème a ses variables et ses #define.
Toujours est-il que certaines variables/def doivent être accessibles dans plusieurs module...
c'est un projet de timer évolué. J'ai par exemple une variable "temps", qui correspond au temps à afficher, en seconde. Elle doit être accessible par la partie qui gère les encodeurs qui règlent le temps, l'ISR du timer qui compte les seconde et y ajoute/soustrait les secondes écoulées, etc... De même que quelques #define, comme ceux qui lancent et arrêtent le compteur en fonction de plusieurs cause:
#define COMPTEUR_START RTC.PITCTRLA = RTC_PERIOD_CYC32768_gc | RTC_PITEN_bm ; marche = 1 //initialiser le cycle à 1 seconde et activer le PIT
#define COMPTEUR_STOP RTC.PITCTRLA = RTC_PERIOD_OFF_gc &~ RTC_PITEN_bm ; marche = 0 //désactiver le PIT et le cycle
effectivement, après plusieurs tests ça fonctionne pour les #define, mais plus pour les variables, j'ai systématiquement l'erreur "multiple definition" ou "not declared in this scope", où que je les mette. Le seul moyen semble de les déclarer en extern dans variables.h puis de les définir dans variables.cpp, et ça c'est la partie un peu laborieuse...
Je pense que mon code n'est simplement pas pensé "bibliothèque" (je suis novice en C), par exemple les variables qui sont directement modifiées par des fonctions et les #define qui sont utilisés à la fois par des fonctions et par le programme principal.
Je réfléchirai mon code nativement au prochain projet, et je continue à parcourir mes >300 lignes pour celui-ci (vu ce qu'il me reste à faire je pense au moins doubler la taille du code).
[pourquoi les ()? puisque justement ce sont des macros?]
Forcément. extern est fait pour cela.
Et le fichier variables.cpp doit inclure variables.h, pour que le compilateur puisse vérifier que les types correspondent.
Ces macros ne sont pas de simples valeurs, c'est du code. L'ajout de () les fait ressembler à un appel de fonction, ce qui est plus parlant.