Strukturierungsproblem
-
Hallo Leute,
wie schon in einem anderen Beitrag geschrieben, komme ich aus der Automatisierungsbranche und programmiere normal Siemens SPS´n.
Dort ist es übliche, jede "Funktion" in einen eigenen "Baustein" zu packen.
Nun, seit ich mit C angefangen habe plagt mich das Problem, das ich das in keiner IDE umsetzen kann. Entweder weil ich es falsch mache oder weil es wirklich nicht so geht wie ich mir das Vorstelle.
Folgende Problematik:
int main() { bla bla; sub1(); }
Ich möche sub1() aber nicht unter oder über main programmieren, weil ich das für unübersichtilich finde.
Also füge ich in meiner IDE (code blocks oder dev cpp) eine neue Quelldatei hinzu, nenne diese xyz.c und programmieren darin die sub1().Prinzipiell funktioniert das schon, wenn ich aber in main gloabale Variablen festlege, oder etwas mit #define deklariere, kann ich in sub1() nicht darauf zugreifen.
Das ist echt nervig. Es funktioniert auch nicht wenn ich nen "Funktionsprototyp" vor main schreibe.
Wie löst ihr sowas? Umfangreiche Programme werden doch nicht alle in einer Datei geschrieben odeR?
-
Django2012 schrieb:
Prinzipiell funktioniert das schon, wenn ich aber in main gloabale Variablen festlege
das ist kein guter programmierstil. benutzung globaler variablen lässt sich (meistens) vermeiden.
Django2012 schrieb:
Umfangreiche Programme werden doch nicht alle in einer Datei geschrieben odeR?
richtiiiig, für umfangreichere programme eignet sich sehr gut das modulare konzept.
Django2012 schrieb:
Wie löst ihr sowas?
sowas löst man mit dem einbinden von headerdateien, in denen die funktionsprototypen und datentypen aufgelistet sind.
für jede headerdatei verwendet man üblicherweisee eine zugehörige c-datei.
diese c-datei kann als ein modul angesehen werden. die module lassen sich dann
einfach austauschen, ohne das man etwas am programmgerüst ändern muss.
(das entrpicht deinen funktionsbausteinen.)
die headerdateien werden wiederum in andere c-dateien eingebunden und zwar dort, wo man sie braucht. include guards nicht vergessen!beispiel:
erstelle eine headerdatei namens sub.h// sub.h #ifndef SUB_H // include guards #define SUB_H // deklaration einer struktur für die bekanntmachung in anderen c-dateien struct demo_struct { int i; }; // prototypen für die bekanntmachung in anderen c-dateien void sub(); void blubb(struct demo_struct*); #endif // SUB_H
erstelle eine datei namens sub.c
// sub.c #include <stdio.h> // puts, printf #include "sub.h" // wir benötigen den typen struct demo_struct // definitionen der funktionen void sub() { puts("sub"); } void blubb(struct demo_struct* p) { printf("blubb: %d", p->i); }
dein modul ist fertig. beide dateien werden(falls sie es nicht schon sind) dem
projekt hinzugefügt.
die funktionen aus sub.c und datentypen aus sub.h kannst du jetzt durch
das bekanntmachen(inkludieren) der datei sub.h in anderen c-dateien benutzen.
z.b. im hauptprogramm:// main.c #include "sub.h" // bekanntmachung der struktur und der funktionen int main(void) { struct demo_struct demo = {1}; sub(); blubb(&demo); return 0; }
-
Vielen Dank, das hat mir weitergeholfen.