Ein paar Fragen zu C



  • Guten Morgen,

    ich fange heute mit C an nachdem ich 4 jahrelang PHP programmiert habe. Nun stellt sich mir die Frage wie ihr eure Programme designt. Packt ihr alle Funktionen die zusammengehören in eine C Datei und packt gleiche Anfangsbuchstaben an die Funktionsnamen ran, also s:

    gt_init, gt_destroy, gt_calc etc.

    Gibt es eine gute Technik um Speicherlecks zu vermeiden?

    Gibt es ein Buch was nicht die Sprache an sich erklärt sondern auf Designpattern oder so eingeht, falls es so etwas in C gibt?

    Danke schon mal für eure Antworten.

    Viele Grüße
    Heiko


  • Mod

    Alle Antworten noch in den ersten 5 Threads im Forum:

    Kapselung:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-272595.html

    Speicherverwaltung (ok, dieser Thread war nicht sooo produktiv. Aber immerhin ein Ansatz):
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-272864.html
    Zyniker würden ja sagen, dass man Speicherlecks in C vermeidet, indem man C++ benutzt 😉 .

    Designpattern: Sind eigentlich unabhängig von der Sprache. Oder sollten sie zumindest. Es gibt natürlich auch C spezifische Programmiertechniken, zum Beispiel wie man in C objektorientiert programmieren kann. Meinst du so etwas? Leider fällt mir dazu spontan kein gutes Buch ein 😞 .



  • Erst einmal danke für deine schnelle Antwort, du hast mir schon etwas weitergeholfen. Der Link über Speicherverwaltung war leider nicht sehr informativ, wie du auch aber schon erwähnt hast. Vielleicht kennt wer da was besseres?
    In OOP-Sprachen gibt es ja die Singleton, Factory, Adapter, MVC etc. Entwurfsmuster und mich würde interessieren ob es für nicht OOP auch so etwas in der Richtung gibt?

    C++ möchte ich nicht unbedingt lernen da ich keine Sinn darin sehe. Ich denke Oberflächen kann ich auch mit Python oder Java oder so machen und für die performancelastigen Geschichten habe ich mir vorgestellt kleine DLLs in C zu schreiben. Und ich denke für kleinere Software, die man eh nur als One-Man-Show entwickeln kann, reicht C locker aus oder? Später würde ich gerne mal kleine Hobbyprojekte mit AVR verwirklichen.

    Gruß
    Heiko



  • Vererbung in ANSI C mit vertretbarem Aufwand hinzubekommen, wäre wohl etwas überambitioniert. Klassen mit enthaltenen Datenstrukturen und Methoden nachzubilden ist aber nicht so schwer, ich verwende auch sowas für eine private Speicherverwaltung. Im einfachsten Fall verwendet man eine zentrale Funktion, die als Parameter u.a. einen eindeutigen Identifizierer (z.B. eine Adresse) enthält, quasi das "this" aus C++. Operationen + Eingabe/Ausgabe-Parameter dann ebenso als ( void* ) Parameter mit angeben.
    Pattern konkret anwendbar auf betriebssystemnahe Sprachen wie C, ich glaube auf solche profanen Alltagsprobleme lassen sich Leute vom Kaliber Gamma/Beck nicht herab.
    Es gibt aber reichlich (unstandardisierte) Implementierungsrichtlinien für C und mit Misra sogar definierte (allerdings auch strittige) Richtlinien, wie man es NICHT machen soll.
    C für performanzkritische Teile und für anderes dann andere jeweils spezialisierte Sprachen zu verwenden, klingt gut.
    Ich habe ein an ein paar Stellen im Usenet empfohlenes Buch zum Thema gefunden,
    http://www.amazon.com/dp/1556155514/?tag=stackoverfl08-20
    es aber selbst nicht gelesen.



  • HeikoM schrieb:

    Packt ihr alle Funktionen die zusammengehören in eine C Datei und packt gleiche Anfangsbuchstaben an die Funktionsnamen ran, also s:

    gt_init, gt_destroy, gt_calc etc.

    Ja. Namespace für Arme. Funktioniert wunderbar.

    HeikoM schrieb:

    Gibt es eine gute Technik um Speicherlecks zu vermeiden?

    Einfache Möglichkeit: loggen von Speicherallozierungen. Später checken mit z.B. valgrind.


Anmelden zum Antworten