Bonjour,

j'ai un petit soucis avec des variables static et je voudrais bien quelque complément d'info car mes recherches n'aboutissent pas.

J'ai une solution sous visual C++ qui contient un projet (.exe) et deux projets (.lib).

Dans le projet CoucheBasse.lib, j'ai un fichier .h ou je stocke des paramètres de calcul dans un fichier param.h.
Toutes les variables de param.h sont déclarer comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
static double testStatic = 8;
Dans mon projet CoucheHaute.lib, j'ai un fichier Init.cpp qui initialise certain paramètre.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
std::cout << "Valeur avant init "<< testStatic <<std::endl;
testStatic = 123;
std::cout << "Valuer apres init "<< testStatic <<std::endl;
Ce bout de code me retourne bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Valeur avant init 8
Valeur apres init 123
J'utilise ensuite ma variable static dans le code de CoucheBasse.lib et la surprise, je ne retrouve pas ma variable à la valeur à laquelle je l'ai initialisé.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
std::cout << "Valeur avant init "<< testStatic <<std::endl;
testStatic++;
std::cout << "Valuer apres init "<< testStatic <<std::endl;
Ce bout de code me retourne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Valeur avant init 8
Valeur apres init 9
Alors que le résultat attendu est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Valeur avant init 123
Valeur apres init 124
Je croit comprendre que chaque lib fait une instance de la variable static testStatic. Mes recherches sur le net semble le confirmer.

Je sais que lorsqu'on a plusieurs projets qui lient avec une même bibliothèque statique ils ont chacun leurs instances des variables statiques
Question : comment faire pour assurer de travailler sur une seule et même instance de testStatic dans les différents .lib ?

J'ai tenté de jouer avec le mots clé EXTERN mais le résultat est inchangé.

Merci à vous.