C / C ++ proqramlaşdırmasında statik və xarici bəyannamələr arasında böyük fərq nədir?


cavab 1:
int add () {statik int x = 0; qayıt ++ x;} extern int a = 3;
int main () {for (int i = 0; i <5; i ++) {cout << əlavə et () << ""; // 1 2 3 4 5} cout << x yazdırır; // etibarsız! X aralığı funksiya üçün. cout << a; // etibarlıdır! a əhatə dairəsindədir! 0;} qayıt
  • Theprogramwontrunifthecout<<xstatementispresent.Thisisbecause,avariabledeclaredstaticremainsinthememorybutitsscopeislimitedtotheblockitisdefinedin.Theprogramproduces12345astheoutputbecause,thevariablexisinmemoryevenaftertheprogramhascomeoutofitsdefinedblock.Thememoryofxisntdestroyed,whichwillhappenifstaticwasabsent.Thescopeofanexternisthewholeprogramanditremainsinthememoryalways.The program won't run if the cout<
Əhatə dairəsi.
xarici - bütün proqram.
statik - yalnız müəyyən edilmiş blokda.

cavab 2:
Extern int dəyişən; // 'dəyişən' istifadə edən kod
int dəyişən; // 'dəyişən' istifadə edən kod
gcc -c foo.c -o foo.o gcc -c bar.c -o bar.o
gcc foo.o bar.o -o icra oluna bilər
.
int dəyişən = 47; // Dəyişən istifadə edən kod '
int dəyişən = 29; // 'dəyişən' istifadə edən kod
statik tam = 0; Zəngi ləğv edin () {count ++; printf ("Bu funksiya% i dəfə deyildi. \ n", say); }
Zəngi ləğv edin () {statik tam = 0; saymaq ++; printf ("Bu funksiya% i dəfə deyildi. \ n", say); }
statik tam = 0; class foo {private: void printCount () {cout << "Var" << count << "foo obyektləri var. \ n"; } Ümumi: foo () {count ++; printCount (); } ~ foo () {nömrə -; printCount (); }};
sinif foo {xüsusi: statik tam = 0; void printCount () {cout << "Var" << say << "foo obyektləri var. \ n"; } Ümumi: foo () {count ++; printCount (); } ~ foo () {nömrə -; printCount (); }};