Avatar billede dehdar Nybegynder
09. november 2008 - 22:57 Der er 8 kommentarer og
1 løsning

Basalt static kontra extern kontra global spørgsmål

Er der nogen der kan forklare hvad forskellen er mellem x1, x2 og x3? Jeg er udmærket klar over, hvorfor man kan have interesse i at erklære medlemsfunktioner, medlemsdata eller lokale variabler for static (eksemplevis singleton), men hvorfor erklære globale funktioner static og hvordan adskiller de sig så fra almindelige globale variabler?
Det sidste spørgsmål er angående "extern". Hvornår er det smart at erklære en variable for extern og hvad sker det helt præcis? På forhånd tak for hjælpen.

#include <iostream>

using namespace std;

int x1 = 123;
static int x2 = 456;
extern int x3 = 789;

int main()
{
    cout << x1 << endl;
    cout << x2 << endl;
    cout << x3 << endl;

    return 0;
}
Avatar billede arne_v Ekspert
09. november 2008 - 23:02 #1
x1: variabel som kan bruges i denne fil og refereres andre steder
x2: variabel som kun kan bruges i denne fil
x3: variabel som kan bruges i denne fil men skal være definereti en anden fil
Avatar billede dehdar Nybegynder
09. november 2008 - 23:06 #2
Hej Arne, jeg forstår det ikke helt.

x2: variabel som kun kan bruges i denne fil? Hvad menes der med fil? For hvis jeg f.eks. har to .cpp filer, så kan jeg tilgå x2 i begge filer, selvom den kun er erklæret ét sted. Det samme gælder x3.

:(
Avatar billede arne_v Ekspert
09. november 2008 - 23:27 #3
første fil:

#include <iostream>

using namespace std;

int x1;
static int x2;

void f();

int main()
{
    x1 = 123;
    x2 = 123;
    f();
    cout << x1 << endl;
    cout << x2 << endl;
    return 0;
}

anden fil:

extern int x1;
static int x2;

void f()
{
  x1 = 456;
  x2 = 456;
}

output:

456
123
Avatar billede arne_v Ekspert
09. november 2008 - 23:27 #4
De to x2 er to forskellige x2, da static gør at de er lokale i filen.
Avatar billede arne_v Ekspert
09. november 2008 - 23:27 #5
x1 er defineret i første fil og refereret i anden fil.
Avatar billede dehdar Nybegynder
09. november 2008 - 23:42 #6
Tusind tak, det hjalp en hel del på forståelsen.

Jeg forsøgte selv at lave et par eksempler for at eksperiementere, men jeg går ud fra, at hvis "Første fil" inkluder "Anden fil", så kan det hele betragtes, som 1 enkelt fil og derfor kan ovenstående eksempel ikke realiseres? :)

Nåh, men tak igen. Smid venligst et svar.
Avatar billede arne_v Ekspert
09. november 2008 - 23:56 #7
Det er korrekt.

Og et svar.
Avatar billede arne_v Ekspert
09. november 2008 - 23:56 #8
en gang mere
Avatar billede segmose Nybegynder
10. november 2008 - 00:51 #9
x3 i første exemple bør give fejl da man kan have

int x3 = 17;

i en anden fil.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester