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

Gast #5128077
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?
Gast #5128088
Globale Variablen sind auch in C++ möglich, wenn auch schlechter Stil.

Zeig mal den ganzen Code. Möglicherweise ist die Variable in datei1.cpp 
const oder innerhalb eines Namespaces?
Persönliche Seite #5128179
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

Eine eigene Frage? Dieser Thread ist über 9 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.