Stałem się profesjonalnym programistą w dobie kodu obiektowego i posiadam wieloletnie doświadczenie w programowaniu w C++. Często pracuję nad dużymi projektami, które mają lata starszego kodu w kombinacji C++ i c. Czuję się mniej komfortowo, pracując na czystych częściach systemu. Od programowania w C++ Rozumiem całą składnię c, ale wiem, jak zorganizować złożony program c bez obiektów i jaka jest najlepsza praktyka w zarządzaniu pamięcią, którą chciałbym wypełnić. Nauczyłem się C++ po pracy jako programista java i myślę, że nieco więcej c sprawiłoby, żebym był lepszym programistą C++, i nieco mniej z java przetłumaczonego na programistę C++Czy są jakieś tutoriale, aby pomóc biegły programista C++ uczyć się c?
Odpowiedz
Pod względem organizacji, patrząc na POSIX APIs, zwłaszcza pthreads które daje dobry pomysł, jak zorganizować kod C. Podstawowe zasady dobrej organizacji projektu C to:
- Nie wystawiaj swoich struktur. Używaj tylko typów nieprzezroczystych.
- Użyj nazw bibliotek i typów danych jako przedrostków nazw funkcji.
- Udostępnianie funkcji "twórz" i "niszcz" w celu przydzielania/konstrukcji i niszczenia/wycofywania.
- Przepuścić typ nieprzezroczysty jako pierwszy parametr dla funkcji działających na tym typie.
- Implementowanie C API przy użyciu C lub C++ (to zależy od Ciebie). Oczywiście używaj tam typów nieprzezroczystych.
Zajmuje się również budowaniem programów z szerokim wykorzystaniem wskaźników. jako że struktury niskopoziomowe i tak byłyby dobrym początkiem. Zależy to również od tego, do czego jest zbudowany program. Czy próbujesz napisać kod C na wbudowanej płycie rtos lub systemie mikrokontrolerów?
Czasami pracuję nad starszymi systemami, które mają dużo c, więc to jest pierwszy powód. Podejrzewam też, że dzięki temu stałbym się lepszym programistą w C++, lepiej znającym programowanie oparte na danych w strukturach i innych technikach, niż zakładając, że wszystko musi być obiektem. –
W takim przypadku bardzo polecałbym ulepszenie wiedzy na temat wskaźnika, ponieważ Java nie pozwala na radzenie sobie ze wskaźnikami. Także jeśli chcesz dowiedzieć się więcej o optymalizacji sprzętu, byłoby wspaniale, gdybyś mógł uzyskać wbudowany komputer jednopłytowy, mikrokontrolery lub smartfon/PDA, aby nauczyć się pisać z C/C++ zoptymalizowanego pod kątem sprzętu. – stanigator
Byłem w zasadzie tą samą łodzią jak ty (choć z mniejszym doświadczeniem i zacząłem od Pythona zamiast Javy), a najlepsze dla mnie było usiąść i czytać Kernighana i Ritchiego. Będziesz mógł przejrzeć pierwszą połowę książki, ponieważ nie masz nic przeciwko składni, ale na pewno odejdziesz z lepszym zrozumieniem zarządzania pamięcią niskiego poziomu.
Czytanie części jądra systemu Linux, które mają do czynienia z zarządzaniem pamięcią, również pomaga, ale nie jest dla osób o słabym sercu lub łatwo znudzonych.
Rozszerzając another answer, jednym ze sposobów jest po prostu napisz obiektowego C. W ten sposób większość bibliotek I zachowują interakcji z (na przykład stos GNOME jest prawie całkowicie obiektowego C, głównie w oparciu o gobject biblioteka, aby było łatwiej). Możesz myśleć o tym jako C++ bez cukru syntaktycznego.
skończyć z API jak
/* 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);
}
co odpowiada niemal dokładnie do
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;
}
Można również sprawdzić The C Programming Language ANSI C Edition napisany przez Kernighana i Ritchie.Tak, jest stary, ale wyświetla się tylko na około 200 stronach i obejmuje cały język, a także standardową bibliotekę.
- 1. Wbudowany programista, jakie umiejętności są ważne
- 2. Czy są jakieś tutoriale lub przykłady dla cubism.js + WebSocket?
- 3. Czy są jakieś dobre tutoriale wideo dla Hibernacji?
- 4. Czy są jakieś "wzorce projektowe" w C?
- 5. Czy są jakieś moduły, których mi brakuje, aby pomóc mi napisać lepszy kod?
- 6. Co może C# uczyć się z Javy?
- 7. Czy powinienem uczyć się języka C# lub Java?
- 8. Sugestie ćwiczeń, aby pomóc w nauce wielowątkowości w języku C#
- 9. Czy są jakieś solidne implementacje dużych liczb całkowitych w C?
- 10. Czy istnieją jakieś dobre tutoriale UIScrollView w sieci?
- 11. Jakieś dobre tutoriale bazy danych przestrzennych?
- 12. Czy są jakieś dobre agregatory wiadomości C#, .net?
- 13. Czy są jakieś różnice między "zsynchronizowaną" Javą i "blokadą" C#?
- 14. Czy są jakieś współbieżne pojemniki w C++ 11?
- 15. Czy są jakieś tutoriale na temat budowy prostego tłumacza za pomocą Alex + Happy?
- 16. Czy są jakieś sytuacje, w których kod miałby sekwencję w C++ 11, ale nie C++ 03?
- 17. Czy są jakieś narzędzia do konwersji kodu źródłowego c/C++ do html?
- 18. Czy są jakieś potencjometry odwołujące się do Pythona/wątki zbierania śmieci podczas pracy z kodem C?
- 19. Czy są jakieś dobre narzędzia BDD typu open source dla C/C++?
- 20. Czy znasz jakieś biblioteki C++ w Voxelu?
- 21. Czy są jakieś .NET ESB?
- 22. Czy są jakieś add_days w datach ruby?
- 23. Jak się uczyć "drogi ABAP"?
- 24. Procesory MIPS: czy są nadal używane? Jakiej innej architektury powinienem się uczyć?
- 25. Loop fusion w C++ (jak pomóc kompilatorowi?)
- 26. Czy są jakieś powszechnie stosowane implementacje IQueryable?
- 27. Czy dostępne są jakieś biblioteki ccTalk?
- 28. Czy warto uczyć się haml & sass?
- 29. Czy należy uczyć się angularjs bez jQuery?
- 30. Jakieś dobre tutoriale ram publikacji/subskrypcji WCF tam?
Znaleziony tutorial wydaje się zakładać, że jesteś programistą c, przenoszącym się do C++. Z pewnością nie mogę być jedynym programistą zorientowanym obiektowo, który chce lepiej zrozumieć c. –
Myślę, że jeśli napiszesz kilka średniej wielkości programów C, które nauczą Cię, jak trzymać się z dala od kłopotów. Faktycznie wpadanie w kłopoty (w dowolnym języku) jest cennym sposobem nauki. Jak dotykanie czegoś gorącego. – Nosredna
Jest kilka pytań w tym stylu na StackOverflow już (i niektóre C# przejście do c pytania). Z mojego ojczystego języka, głównie z punktu widzenia C++, zauważyłem kilka rzeczy, które wyglądały dobrze. Mogą być warte polowania. – dmckee