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; }
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); |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.