Globale variablen extern

OP #3667061
Lesenswert?

Hi

ich möchte einige globale Variablen in mehrere c Dateien einbinden.
Ich weiß, dass es hierzu schon einige Beiträge gibt wie:
Beitrag "Globale Variablen, mehrere Dateien"
oder
http://www2.informatik.uni-halle.de/lehre/c/c_globv.html

Meine Frage ist eigentlich nur, ob ich EXTERN hierfür überhaupt 
benötige.
(Was genau EXTERN macht verstehe ich noch nicht so ganz^^)

Ich habe nämlich mittels Atmel Studio 6 folgendes Programm mittels 
Debugger ausprobiert und es funktioniert so. Oder gibt es einen 
Schönheitsfehler, welchen ich nicht bemerkt habe?

Ich habe auch irgendwo mal gelesen, dass man die global.h in jedes c 
file einbinden müsste. Dies geht aber nicht, da dann die Meldung
redefinition of 'a'
erscheint.


//------main.c-------
#include <avr/io.h>

#include "global.h"
#include "test.c"
#include "test2.c"

int main(void)
{
    while(1)
    {
    hoch();
    hoch_2();
    a++;
    }
}

//-------global.h------
uint8_t a =2;

//------test.c-----
void hoch (void)
{
  a++;
}

//----test2.c
void hoch_2(void)
{
  a=a+2;
}
Gast #3667171
Lesenswert?

Code mittels #include einzubinden ist sehr schlechter Stil.
Die einzelnen .c werden normalerweise einzeln compiliert (in 
Objektdateien) und dann vom Linker zusammen gebunden.

Dann darfst du deine globalen Variablen auch nicht mehr in der .h 
definieren sondern nur deklarieren. Und da gehört dann auch das extern 
davor, damit der Compiler weiß, dass die Variable woanders definiert 
wurde.
1
//------main.c-------
2
#include <avr/io.h>
3

4
#include "global.h"
5
#include "test.h"
6
#include "test2.h"
7

8
uint8_t a =2;
9

10
int main(void)
11
{
12
    while(1)
13
    {
14
    hoch();
15
    hoch_2();
16
    a++;
17
    }
18
}
19
//-------global.h------
20
extern uint8_t a;
21

22
//------test.c-----
23
#include "global.h"
24
void hoch (void)
25
{
26
  a++;
27
}
28

29
//------test.h-----
30
void hoch (void);
31

32
//----test2.c
33
#include "global.h"
34
void hoch_2(void)
35
{
36
  a=a+2;
37
}
38

39
//----test2.h
40
void hoch_2(void);

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren