Liaison interne de la persistance du stockage statique C++ --- Variables globales statiques

1. Conception

Lorsque le qualificateur statique est utilisé pour une variable dont la portée est le fichier entier, la liaison de la variable sera interne. Dans un programme multi-fichiers, la distinction entre liens internes et externes a du sens. Les variables avec lien interne ne peuvent être utilisées que dans le fichier auquel elles appartiennent, mais les variables externes régulières ont un lien externe, c'est-à-dire qu'elles peuvent être utilisées dans d'autres fichiers.
Réflexion : Et si vous souhaitez utiliser le même nom dans d'autres fichiers pour représenter d'autres variables ?
En plus d'utiliser le mot-clé extern, vous pouvez également utiliser des variables de modificateur statiques pour limiter la portée des variables aux fichiers
2. Exemple de code
fichier1.cpp
#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.

Je suppose que tu aimes

Origine blog.csdn.net/banzhuantuqiang/article/details/130912644
conseillé
Classement