1. Conception
#include <iostream>
int tom=3;
int harry=300;
void remote_access();
using namespace std;
int main()
{
cout <<"main() reports the following addressses:\n";
cout <<"file1.cpp &tom"<<&tom<<",,,,tom="<<tom<<endl;
cout <<"file1.cpp &harry"<<&harry<<",,,,harry="<<harry<<endl;
remote_access();
return 0;
}
fichier2.cpp
#include <iostream>
extern int tom;
static int harry=200;
void remote_access()
{
using namespace std;
cout << "remote_access() reports the follwing addresses:\n";
cout <<"file2.cpp &tom"<<&tom<<",,,,tom="<<tom<<endl;
cout <<"file2.cpp &harry"<<&harry<<",,,,harry="<<harry<<endl;
}
Compilez les deux fichiers cpp ci-dessus : g++ fichier1.cpp fichier2.cpp -o test
Les résultats d'exécution sont les suivants :
main() reports the following addressses:
file1.cpp &tom0x403010,,,,tom=3
file1.cpp &harry0x403014,,,,harry=300
remote_access() reports the follwing addresses:
file2.cpp &tom0x403010,,,,tom=3
file2.cpp &harry0x403020,,,,harry=200
Résumé : La description ci-dessus, utilisez extern pour obtenir l'effet d'une seule variable, suivez la règle de la variable unique, ne définissez qu'une seule fois et l'adresse mémoire est la même (l'adresse mémoire de la variable tom dans file1.cpp et la variable memory l'adresse dans file2.cpp sont les mêmes) ; Utiliser static pour déclarer des variables équivaut à réappliquer des variables (l'adresse mémoire de la variable harry dans file1.cpp n'est pas la même que l'adresse mémoire de la variable dans file2.cpp), la portée de cette variable est dans file2.cpp, c'est-à-dire que dans ce fichier, des règles de variable unique peuvent également être obtenues, le principe est similaire à l'utilisation d'un espace de noms.