Verständnisfrage: Externe Variable in C und C++

Gast #5128077
Lesenswert?

Hallo zusammen,

1. Fall:
Ich habe eine Variable in "datei1.c" definiert.
Wenn ich diese Variable in "datei2.cpp" verwenden will, geht das mit
1
extern "C" uint8_t Variable;

2. Fall
Ich habe eine Variable in "datei1.cpp" definiert (außerhalb einer 
Klasse).
Wie kann ich diese Variable in "datei2.cpp" verwenden?
Sowohl
1
extern uint8_t Variable;
also
1
extern "C" uint8_t Variable;
ergeben den Linkerfehler "undefined reference to Variable".
Oder ist dieser Fall gar nicht vorgesehen?
Persönliche Seite #5128179
Lesenswert?

Frank Roggel schrieb:
> extern uint8_t Variable;

Deklaration in einem C-Modul.

> extern "C" uint8_t Variable;

Deklaration in einem C++-Modul, falls das Objekt geneinsam von C- und 
C++-Modulen verwendet wird. Falls das Objket aussschließlich von C++ 
verwendet wird, kann das "C" entfallen.  Wird ei Header gemeinsam von 
C++ und C Modulen verwendet, findet sich i.d.R. #ifdef __cplusplus 
darin, z.h. in datei1.h:
1
#ifdef __cplusplus
2
extern "C" uint8_t var1;
3
#else
4
extern uint8_t var1;
5
#endif
6

7
#ifdef __cplusplus
8
extern "C" {
9
#endif
10

11
extern uint8_t var2;
12

13
#ifdef __cplusplus
14
}
15
#endif

> ergeben den Linkerfehler "undefined reference to Variable".

Es fehlt die Definition des Objekts, entweder weil die Definition in 
Quelle (effektiv) fehlt oder wegen eines Problems in der Build-Umgebung, 
z.B. weil datei1.o nicht gegen die Anwendung gelinkt wird.

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