Ich wurde ein professioneller Programmierer in der Ära des objektorientierten Codes und habe jahrelange Erfahrung in der Programmierung in C++. Ich arbeite oft an großen Projekten, die jahrelangen Legacy-Code in einer Mischung aus C++ und C haben. Ich fühle mich weniger wohl bei der Arbeit an reinen c-Teilen von Systemen. Aus der Programmierung in C++ verstehe ich die ganze c-Syntax, aber es gibt ein Loch in meinem Wissen darüber, wie man ein komplexes c-Programm ohne Objekte organisiert und was Best Practice für die Verwaltung von Speicher darstellt, das ich füllen möchte. Ich lernte C++ nach der Arbeit als Java-Programmierer, und denke ein bisschen mehr c würde mich zu einem besseren C++ - Programmierer, und ein bisschen weniger von Java in C++ - Programmierergibt es irgendwelche Tutorials, um einem fähigen C++ Programmierer zu helfen, c zu lernen?
Antwort
In Bezug auf die Organisation, an der POSIX APIs suchen, vor allem pthreads geben Ihnen eine gute Vorstellung davon, wie C-Code zu organisieren. Die Grundregeln einer guten C-Projektorganisation sind:
- Setzen Sie Ihre Strukturen nicht frei. Verwenden Sie nur opake Typen.
- Verwenden Sie die Bibliotheks- und Datentypnamen als Präfixe für Funktionsnamen.
- Stellen Sie "create" und "destroy" -Funktionen für die Zuordnung/Konstruktion und die Zerstörung/Freigabe zur Verfügung.
- Übergeben Sie den opaken Typ als ersten Parameter für Funktionen, die für diesen Typ verwendet werden.
- Implementieren Sie die C-APIs mit C oder C++ (es liegt an Ihnen). Natürlich verwenden Sie dort nicht-opake Typen.
Blick in das Erstellen von Programmen mit umfangreichen Verwendung von Zeigern sowie als Low-Level-Strukturen wäre meiner Meinung nach sowieso ein guter Anfang. Es hängt auch davon ab, wofür das Programm gebaut ist. Versuchen Sie, C-Code auf einem eingebetteten Rtos-Board oder einem Mikrocontroller-System zu schreiben?
ich arbeite manchmal an Legacy-Systemen, die eine Menge von c haben, also das ist der ursprüngliche Grund. Ich vermute auch, dass es mich zu einem besseren C++ - Programmierer machen würde, um mit dem Entwerfen von Programmen vertraut zu sein, die um Daten in Strukturen und anderen c-Techniken herum gebaut sind, anstatt davon auszugehen, dass alles ein Objekt sein muss. –
In diesem Fall würde ich sehr empfehlen, Ihr Zeigerwissen zu verbessern, da Java Ihnen nicht erlaubt, mit Zeigern umzugehen. Auch wenn Sie etwas über die Hardware-Optimierung erfahren möchten, wäre es großartig, wenn Sie einen eingebetteten Single-Board-Computer, Mikrocontroller oder ein Smartphone/PDA bekommen könnten, um zu lernen, C/C++ für Hardware zu schreiben. – stanigator
Ich war im Grunde das gleiche Boot wie du (wenn auch mit weniger Erfahrung, und ich begann mit Python und nicht Java), und was am besten für mich funktionierte, setzte sich hin und las Kernighan und Ritchie. Sie werden in der Lage sein, die erste Hälfte des Buches zu überfliegen, da Sie mit der Syntax vertraut sind, aber Sie werden auf jeden Fall mit einem besseren Verständnis des Low-Level-Speichermanagements vertraut sein.
Das Lesen der Teile der Linux-Kernel-Quelle, die mit Speicherverwaltung zu tun haben, hilft auch, ist aber nicht für schwache Nerven oder leicht zu langweilig.
Aufbauend auf another answer, ist eine Möglichkeit, nur zu schreiben, objektorientierter C. Dies ist die Art und Weise der meisten Bibliotheken, die ich mit behave interagieren (zum Beispiel des GNOME-Stack fast vollständig objektorientiertes C ist, vor allem auf der Grundlage der gobject Bibliothek, um es einfacher zu machen). Man kann es sich als C++ vorstellen, ohne einen Teil des syntaktischen Zuckers.
Sie am Ende mit einer API wie
/* in project NewStuff; namespace is ns */
ns_foo_t *ns_foo_new();
void ns_foo_delete (ns_foo_t *);
int ns_foo_make_waffles (ns_foo_t *this, int no_of_guests);
int main() {
ns_foo_t *my_foo = ns_foo_new();
ns_foo_make_waffles (my_foo, 1);
ns_foo_delete (my_foo);
}
, die
fast genau entspricht
class Foo {
public:
Foo() { /* whatever */ }
int make_waffles (int no_of_guests) {}
};
int main() {
Foo *my_foo = new Foo();
my_foo->make_waffles (1);
delete my_foo;
}
Sie könnten auch The C Programming Language ANSI C Edition von Kernighan und Ritchie geschrieben überprüfen.Ja, es ist alt, aber es kommt nur auf ungefähr 200 Seiten und deckt die gesamte Sprache sowie die Standardbibliothek ab.
- 1. Lernen C für Programmierer
- 2. Lernen C++ als Perl-Programmierer
- 3. Bücher/Tutorials zu lernen SVG
- 4. Lernen OO für einen C-Programmierer
- 5. Bücher zu lernen objective-C für einen erfahrenen Programmierer
- 6. Umzug von einem C# "Programmierer" zu einem. NET "Entwickler"
- 7. Gibt es in C# 3.0 irgendwelche Klassen, die mir helfen, statisches HTML zu generieren?
- 8. COM (C++) Programmierung Tutorials?
- 9. Gibt es irgendwelche Vorteile für das Lernen von LISP?
- 10. Ressourcen für C++ Programmierer JS lernen
- 11. Gibt es irgendwelche Werkzeuge, um mit komplexer 'if' Logik zu helfen?
- 12. Fragen zu Scala von einem C++ - Programmierer (Structs und STL)
- 13. Gibt es Tutorials/Anleitungen, um Firebug zu verwenden?
- 14. Gibt es irgendwelche guten UIScrollView Tutorials im Netz?
- 15. Gibt es irgendwelche Gründe, warum ein C# -Entwickler Emacs/Vim lernen sollte?
- 16. Gibt es gute Tutorials für SDL2.0 für C-Programmierung? (nicht C++)
- 17. Gibt es irgendwelche Werkzeuge, um C++ so umzugestalten, dass es den Kodierungsstandards entspricht?
- 18. Lernen C von einem Hintergrund in C#
- 19. Gibt es irgendwelche guten Online-Tutorials für TDD für einen erfahrenen Programmierer, der neu beim Testen ist?
- 20. Gibt es gute Tutorials für Threads in Windows? C++
- 21. Gibt es Werkzeuge, die helfen, #includes zu organisieren?
- 22. Sollte ich Fortran oder C++ lernen, um R zu erweitern?
- 23. Gibt es Tools, um Java und C++ zu integrieren?
- 24. Gibt es ein Programm, um Assembly in C++ zu konvertieren?
- 25. Gibt es eine C-Funktion, um die Verzeichnisberechtigung zu erhalten?
- 26. Gibt es gute Tutorials für ice4j?
- 27. Gibt es ein C# -Äquivalent zu C++ std :: partial_sort?
- 28. Beste Rechner-Software, um Programmierern zu helfen
- 29. Lerne es, Eclipse für C++ - Entwicklung zu lernen
- 30. Gibt es irgendwelche Verwendung für lokale Funktionsdeklarationen?
je Tutorial habe ich gefunden, scheint zu der Annahme, Sie sind ein c-Programmierer Umzug nach C++. Sicherlich kann ich nicht der einzige objektorientierte Programmierer sein, der c besser verstehen will. –
Ich denke, wenn Sie ein paar mittelgroße C-Programme schreiben, die Ihnen beibringen, wie man sich aus Ärger heraushält. In Schwierigkeiten zu geraten (in jeder Sprache) ist eine wertvolle Art zu lernen. Wie etwas Heißes berühren. – Nosredna
Es gibt mehrere Fragen in diesem Sinne bereits in StackOverflow (und einige C#, die zu c Fragen wechseln). Von meinem Muttersprachler meist funktional in C++ - Aussichtspunkt, sah ich jedoch einige Dinge Ratschläge, die gut aussahen. Sie könnten es wert sein, zu jagen. – dmckee