Gast
#4678810
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
error: 'module_config' undeclared (first use in this function) Wieso geht extern hier nicht?
|
Anzeige
|
Warum geht GCC Extern hier nicht?
Gast
#4678810
error: 'module_config' undeclared (first use in this function) Wieso geht extern hier nicht?
Gast
#4678811
Moin, vermutlich fehlt da ein struct davor. extern struct _module_config module_config;
Gast
#4678812
und wieder... das static muss natürlich auch weg, wenn du das struct in anderen Dateien benutzen willst.
Gast
#4678815
Du musst die Typ-Definition deines Structs in ein Header-File auslagern. in das kann dann auch die "extern"-Zeile. in main.c dann die Variable anlegen und initialisieren, aus xx.c kannst du dann darauf zugreifen. (in xx.c muss auch bekannt sein, wie die struct intern aussieht, also z.B. dass es darin ein Member "mac" gibt) Simon schrieb: > //main.c > static const struct _module_config static heißt, dass der Namne von außen nicht sichtbar ist. Warum hast du das da hingeschrieben? > { > uint16_t passkey[8]; > uint8_t mac[6]; // 6b Mac Address of Module > } module_config = { {0} , {0xAA,0xBB,0xCC,0x11,0x22,0x33} }; > > //xx.c > extern _module_config module_config; Hier versuchst du, von außen den Namen zu benutzen, den du oben explizit gegen die Nutzung von außen gesperrt hast. Das ist aber nicht der Grund für die Fehlermeldung. Wie nicht"Gast" oben schon geschrieben hat, heißt der Typ nicht _module_config, sondern struct _module_config, und der Typ muss natürlich in xx.c auch bekannt sein.
Gast
#4678834
Scheint so zu gehen Ja, sollte so passen, sofern du mit "alle_anderen.c" eine einzelne Datei und nicht alle anderen C-Files meinst. Die unterste Zeile darf nur in genau einer Datei stehen.
Gast
#4678841
ja genau. vielen Dank! Zwei kleine Hinweise... Simon schrieb: >... Wenn man das "ausführlich" schreibt, ist das also:
Bezeichner "sollten" in C allerdings nicht mit einem Unterstrich beginnen. (Um potentielle Konflikte mit vom Compiler definierten Namen zu vermeiden.) nicht"Gast" schrieb: > und wieder... > > das static muss natürlich auch weg, wenn du das struct in anderen > Dateien benutzen willst. Manchmal kann es sinnvoll sein (static const) Variablen im Header zu instantiieren. Man erhält in jedem Object File eine (identische) Instanz. Durch das "static" gibt es keine Namenskonflikte. Man könnte also durchaus in den Header schreiben:
Edit: Wie im Eingangsposting gezeigt. Auf das "extern" verzichtet man dann. Wenn man das extern richtig deklariert stört es aber auch nicht.
Gast
#4679082
Bau dir doch eine Schnittstelle, dann brauchst du auch kein extern. Das könnte dann so, oder so ähnlich aussehen:
Gast
#4679423
Auch ne nette Idee, vielen Dank Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|