Go Down

Topic: Variables extern (Read 220 times) previous topic - next topic

icare

Apr 21, 2019, 10:03 am Last Edit: Apr 21, 2019, 11:43 am by icare
Bonjour,
J'utilise dans une bibliothèque des variables déclarées dans le programme principal. Par exemple :

Code: [Select]
extern int i;
extern const char* toto;


Peut-on faire de même avec un
Code: [Select]
#define DUMMY "Pourquoi pas"
 sans passer par un tableau de char ?
[edit] Il reste la solution de passer par un fichier .h pour définir les déclarations.
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

hbachetti

Je n'avais pas compris la question.
Une macro dans l'application n'est pas visible depuis une librairie.

Quant à définir des externs dans la librairie et les déclarer dans l'appli, ce n'est franchement pas terrible.
Autant passer des paramètres à une fonction d'initialisation et stocker ces variables dans la librairie.

Code: [Select]

int i;
const char* toto;

void begin(int c, const char *msg)
{
  i = c;
  toto = msg;
}
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

icare

Bonjour Henri,
Je suis tout à fait d'accord avec toi, mais dans le cas de la compilation de modules avec assemblage ultérieur c'est bien pratique voir indispensable.
C'était un exemple de ce qui existe pour les variables et je me posais la question sur un équivalent sur les directives. Les directives n'ayant de type alors quid ?
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

hbachetti

Si tu parles d'une directive située dans l'application, elle est interprétée par le préprocesseur et directement substituée dans le code source avant compilation.
Partons sur une directive de compilation dans le style de ceci :

Code: [Select]

#define DUMMY "Pourquoi pas"
char *toto = DUMMY;


La chaîne "Pourquoi pas\0" sera logée en mémoire mais n'aura aucun symbole associé.
Le pointeur toto sera un symbole à part entière et pointera sur la chaîne "Pourquoi pas".
toto pourra être utilisé par une librairie si la librairie la déclare en extern, mais pas la chaîne "Pourquoi pas".
Linux is like a wigwam: no Windows, no Gates, and an Apache inside ...

Go Up