mehrfach definiert
-
stimmt das dann so
main.c:
extern int Funktion(int, int); extern int var1; extern var2; int main(void) { Funktion(var1,var2); return 0; }
Daten.h:
int var1; int var2;
Daten.c:
int Funktion(int var1,int var2) { ... }
-
Nein - in der "daten.h" brauchst du die 'extern'-Angaben (bei den Funktionen übrigens nicht unbedingt, die sind automatisch extern, wenn du den Funktionsrumpf weglässt), die zugehörigen Definitionen ("int var1;" etc) gehören in die "daten.c".
(und das Hauptprogramm benötigt dann nur ein "#include "daten.h" am Anfang)
-
so jetzt aber:
in main.c:
#include "Daten.h" int main(void) { Funktion(var1,var2); return 0; }
in Daten.h:
#ifndef Daten_H #define Daten_H extern Funktion(int, int); extern var1; extern var2; #endif
in Daten.c:
#include "Daten.h" int Funktion(int var1,int var2) { var1 = 1, }
-
var1 und var2 sind doch nur Parameter deiner Funktion? Oder habe ich jetzt etwas übersehen? In dem Fall brauchst du sie gar nicht als eigenständige Variablen anzulegen: "extern int v;" deklariert eine globale Variable.
-
und wenn ich diese als globale Variable nehmen möchte!?
-
Dann musst Du sie in daten.c auch noch definieren.
Aber was für einen Sinn macht es einer Funktion, die zwei Parameter annimmt, zwei globale Variablen zu übergeben deren lokale Kopien auf dem Stack der Funktion dann verändert werden
-
Ich kommt nicht weiter...
Wie soll ich das denn da machen, wenn ich die 2 Parameter int var1 und int var2 (sind Parameter der Funtkion in mehreren anderen Funtkionen benutzen möchte?
-
Du kannst von dieser Funktion aus auch beliebige andere Funktionen aufrufen, z.B:
int Funktion(int v1,int v2) { Func2(v1); Func2(v2); return v1+v2; } int main() { int i,j,k; ... k=Function(i,j); ... }
-
also hab ich das doch eigentlich richtig gemacht
-
Ja, nur die "extern int..." Deklarationen benötigst du nicht (globale Variablen solltest du sowieso nur in Ausnahmefällen einsetzen - wenn du Daten zwischen zwei Funktionen austauschen willst, ist es sicherer, über Parameter oder Rückgabewerte zu gehen).
-
ok, ich denke ich habe es jetzt kapiert.
danke