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.