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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.