Doppelte Variablendefinition
-
Hallo,
hab folgendes Problem: Mein Prgramm besteht aus 3 Dateien.
Main.c
Functions.c
Functions.hBeide c-dateien binden den Header ein. Ich habe im Header Konsanten definiert, die in beiden c-dateien benötigt werden. Bei dieser Konstellation meckert der Linker wegen "multiple definitions", da ich ja den Header zweimal einbinde.
Packe ich die Definition der Konstanten in die main.c meckert der Compiler, das er die Konstante in function.c nicht kennt. Wie kann ich das elegant lösen?
Habs schon mit "static const" probiert aber das klappt nicht.Danke für eure Hilfe
Gruß
Kristian
-
extern const blubb;
in den headerdie eigentliche Konstante in die Sourcedatei.
-
Schau mal nach extern.
Machst du eigentlich C oder C++?
-
der beschreibung nach c
-
eben.
Das sollte eigentlich ein zarter Hinweis sein, dass er sich im falschen Forum befindet.
-
Dieser Thread wurde von Moderator/in Phoemuex aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
kannst du die deklaration der konstanten mal posten?
konstantendeklarationen wie const int i=5 gehen nur in c++ und nicht in c. in c solltest du für konstanten präprozessor-makros verwenden.
-
Konfusius schrieb:
kannst du die deklaration der konstanten mal posten?
konstantendeklarationen wie const int i=5 gehen nur in c++ und nicht in c. in c solltest du für konstanten präprozessor-makros verwenden.
Erst einmal Danke für die obigen Antworten. Habs mit extern gemacht und nun läuft es.
@Konfusius: Ich hab es genauso definiert wie du es in deinem Beispiel hast und es funktioniert. Was meinst du mit präprozessor-Makros, #define ... ?
-
yup das meint er
-
Konfusius schrieb:
konstantendeklarationen wie const int i=5 gehen nur in c++ und nicht in c.
selbstverständlich geht sowas auch in C
const int i=5; i = 3; // <-- error: lvalue is const object
-
~fricky schrieb:
selbstverständlich geht sowas auch in C
const int i=5; i = 3; // <-- error: lvalue is const object
Dann ist das eben kein (ANSI-)C-Compiler!
-
Javaner schrieb:
Dann ist das eben kein (ANSI-)C-Compiler!
der kann sogar C99.
-
~fricky schrieb:
Konfusius schrieb:
konstantendeklarationen wie const int i=5 gehen nur in c++ und nicht in c.
selbstverständlich geht sowas auch in C
const int i=5; i = 3; // <-- error: lvalue is const object
Klar. Gemeint war vermutlich eher folgendes (Achtung, ist in C++ nix mit VLA. Dass das in C99 auch geht, weiss ich):
const int i=5; char ary[i];
Javaner schrieb:
Dann ist das eben kein (ANSI-)C-Compiler!
Hä?