Sono diventato un programmatore professionista nell'era del codice orientato agli oggetti e ho anni di esperienza nella programmazione in C++. Lavoro spesso su progetti di grandi dimensioni che hanno anni di codice legacy in un mix di C++ e c. Mi sento meno a mio agio a lavorare su parti di sistemi puri. Dalla programmazione in C++ capisco tutta la sintassi c, ma c'è un buco nella mia conoscenza su come organizzare un programma c complesso senza oggetti, e ciò che costituisce la migliore pratica per la gestione della memoria che vorrei riempire. Ho imparato C++ dopo aver lavorato come programmatore java, e penso un po 'di più c mi renderebbe un programmatore C++ migliore e un po' meno di un java tradotto in programmatore C++ci sono tutorial per aiutare un abile programmatore C++ a imparare c?
risposta
In termini di organizzazione, guardando il POSIX APIs, soprattutto pthreads vi darà una buona idea di come organizzare il codice C. Le regole di base dell'organizzazione del buon progetto C sono:
- Non esporre le strutture. Utilizzare solo tipi opachi.
- Utilizzare i nomi di libreria e tipo di dati come prefissi per i nomi di funzione.
- Fornisce le funzioni "crea" e "distruggi" per allocazione/costruzione e distruzione/deallocazione.
- Passare al tipo opaco come primo parametro delle funzioni che operano su quel tipo.
- Implementa le API C utilizzando C o C++ (dipende solo da te). Ovviamente, usa tipi non opachi lì.
Guardare a programmi di costruzione con ampio uso di puntatori e le strutture di basso livello sarebbero comunque un buon inizio secondo me. Dipende anche da cosa è stato progettato il programma. Stai provando a scrivere il codice C su una scheda rtos embedded o un sistema di microcontrollori?
a volte lavoro su sistemi legacy che hanno un sacco di c, quindi questa è la ragione iniziale. Sospetto anche solo che mi farebbe diventare un programmatore C++ migliore per familiarizzare con la progettazione di programmi che sono costruiti attorno a dati in strutture e altre tecniche, piuttosto che assumere che tutto debba essere un oggetto. –
In tal caso, suggerirei di migliorare la conoscenza del puntatore, poiché Java non consente di gestire i puntatori. Inoltre, se si desidera conoscere l'ottimizzazione dell'hardware, sarebbe fantastico poter ottenere un computer embedded a bordo singolo, microcontrollori o smartphone/PDA per imparare come scrivere C/C++ ottimizzato per l'hardware. – stanigator
Ero praticamente sulla stessa barca (anche se con meno esperienza, e ho iniziato con Python piuttosto che con Java), e quello che ha funzionato meglio per me era sedermi e leggere Kernighan e Ritchie. Sarai in grado di sfogliare la prima metà del libro dal momento che ti senti a tuo agio con la sintassi, ma sicuramente riuscirai a comprendere meglio la gestione della memoria di basso livello.
Leggendo le parti del codice sorgente del kernel di Linux che hanno a che fare con la gestione della memoria aiuta anche, ma non è per i deboli di cuore o il annoia facilmente.
Ampliando another answer, un modo è quello di scrivere solo orientato agli oggetti C. Questo è il modo più librerie che interagiscono con comportano (ad esempio lo stack GNOME è quasi interamente orientata agli oggetti C, principalmente sulla base della gobject libreria per renderlo più facile). Puoi pensarlo come C++ senza un po 'di zucchero sintattico.
si finisce con un'API come
/* 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);
}
che corrisponde quasi esattamente al
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;
}
Si potrebbe anche verificare The C Programming Language ANSI C Edition scritto da Kernighan e Ritchie.Sì, è vecchio, ma funziona solo a circa 200 pagine e copre l'intera lingua e la libreria standard.
- 1. Tutorial C++ per programmatore C esperto
- 2. Devo imparare Openedge come programmatore C#
- 3. Libri per imparare l'obiettivo C per un programmatore esperto
- 4. Tutorial per Pascal/Delphi per C++ - Coders
- 5. C++ per programmatore Objective-C
- 6. Dovrei imparare a implementare OOP in C? Ci sono progetti che usano OOP in C?
- 7. Guide per aiutare ad imparare C++ specificatamente da uno sfondo C#
- 8. Apprendimento OO per programmatore C
- 9. Learning C++ come programmatore Perl
- 10. Apprendimento C# come programmatore VB.NET
- 11. Ci sono motivi per cui uno sviluppatore C# dovrebbe imparare Emacs/Vim?
- 12. Inizia a imparare C# senza conoscere C?
- 13. Miglior tutorial per imparare SSIS
- 14. Tutorial su Mono C#?
- 15. Python per un programmatore Perl
- 16. Ci sono buone esercitazioni per ice4j?
- 17. In C# ci sono oggetti Lambda Expressions?
- 18. Quante versioni degli standard C++ ci sono?
- 19. ci sono comunicazioni SFTP in C#?
- 20. C# tutorial per scrivere gadget
- 21. Tutorial webt di Qt per C++
- 22. buon tutorial per imparare il C++ di sviluppo per Game Boy
- 23. Come dovrebbe un programmatore C++ progettare software in C?
- 24. modelli di progettazione famosi che un C++ programmatore dovrebbe sapere
- 25. Devo imparare C prima di imparare Javascript?
- 26. Dove dovrebbe iniziare un veterano programmatore Java per padroneggiare C?
- 27. Perché non ci sono raccolte simultanee in C#?
- 28. Ci sono dei buoni tutorial sull'utilizzo di buildout e pip?
- 29. Qualcuno potrebbe aiutare a spiegare cosa fa questo rivestimento C?
- 30. Introduzione a C# per utenti C/C++
il tutorial che ho trovato sembra presumere che tu sia un programmatore c che si sposta in C++. Sicuramente non posso essere l'unico programmatore orientato agli oggetti che vuole capire meglio c. –
Penso che se scrivi un paio di programmi C di medie dimensioni che ti insegnano come stare fuori dai guai. In realtà mettersi nei guai (in qualsiasi lingua) è un modo prezioso per imparare. Mi piace toccare qualcosa di caldo. – Nosredna
Ci sono diverse domande in questa vena su StackOverflow già (e alcuni C# si spostano in c domande). Dal mio altoparlante nativo per lo più funzionale nel punto di vista del C++, ho visto molte cose consigli che sembravano buone. Potrebbe valere la pena di andare a caccia. – dmckee