modo pratico per imparare C? [chiuso]

10

Voglio scavare in C e normalmente quando voglio imparare una nuova lingua penso a un obiettivo di progetto semplice / raggiungibile che abbia qualche scopo pratico (utilizzare una API, automatizzare un'attività, ecc ...)

Ho più difficoltà a crearne uno per C principalmente perché tutto ciò che leggo indica il fatto che l'uso primario di C è attualmente in sistemi embedded e in progetti software più complessi come i sistemi operativi.

Questo mi indica il fatto che non ho bisogno di impararlo o che devo solo essere un po 'più complicato nella mia strategia di apprendimento?

Riferimenti a risorse di apprendimento pratiche? (tutorial / come che produce un risultato finale che ha qualche scopo / benifit)

    
posta jondavidjohn 28.08.2011 - 18:16
fonte

6 risposte

27

Ti suggerisco semplicemente di prendere una copia di Kernighan e Ritchie's The C Programming Language (2a edizione) . Ha un numero di esercizi alla fine di ogni capitolo che puoi fare, oltre a fornire un'ottima introduzione al linguaggio C. Non ti renderà padrone della lingua, ma dovresti avere una buona conoscenza alla fine del libro e degli esercizi per trovare forse un progetto open source scritto in C in cui potresti leggere l'origine e forse contribuire a

.

Se vuoi vedere dei progetti reali nel mondo reale con il codice C al loro interno. Sta diventando sempre più difficile: molti progetti usano un linguaggio di "livello superiore", ma C è ancora vivo e vegeto. Se vuoi imparare C, non aver paura di reinventare la ruota per ottenere l'apprendimento. Non è una buona idea reinventare soluzioni sull'orologio, ma è perfettamente corretto farlo come esercizio accademico.

    
risposta data 28.08.2011 - 18:40
fonte
1

Dovrai veramente capire l'allocazione della memoria. Sembra che tu abbia già usato altre lingue, ma è probabile che quelle altre lingue nascondano i dettagli cruenti della gestione della memoria da te. In C, la gestione della memoria è sempre esplicita. Ci sono alcuni vantaggi in questo, ma significa che devi stare attento a farlo bene o che tutto l'Inferno si scatenerà.

Usa qualsiasi dispositivo di debugging della memoria disponibile per la piattaforma che usi. Per Linux c'è Electric Fence, su Mac OS X c'è Guardia Malloc. Inoltre c'è Valgrind che supporta un certo numero di sistemi operativi.

Se non riesci a liberare memoria che dovrebbe essere liberata, avrai una perdita di memoria. Continuate così e avrete esaurito la memoria. Anche con il backing store (ciò che la maggior parte delle persone chiama memoria virtuale), puoi far sì che il sistema esegua una pagina eccessiva o addirittura a corto di spazio di swap.

Se si libera memoria che è già stata liberata, si corrompe l'heap e si blocca, ma probabilmente non subito. Si corrompe anche l'heap se si supera un buffer. Gli strumenti di debug della memoria ti aiuteranno con tutti questi

Anche il test delle unità aiuta.

    
risposta data 28.08.2011 - 19:47
fonte
0

Sono d'accordo con la maggior parte delle persone qui che oggi le lingue sono determinate dal compito in questione. C'è stato un tempo in cui hai avuto una scelta limitata a questo riguardo.  Oggi C viene utilizzato principalmente nel dominio di programmazione Embedded / System in cui è necessario ottimizzare il codice. È necessario scrivere codici precisi per ottenere il massimo perché, se mai si inizia a usare quell'astrazione, le cose sottostanti devono essere molto robuste. Direi che cerchi di aggirare alcuni progetti GNU open source come Linux stesso o qualcosa che ha bisogno di sviluppatori C. Metti alla prova la tua mano in quei progetti invece di scrivere qualcosa da zero in C. Questo è probabilmente il modo migliore per scrivere codici e imparare una lingua.

    
risposta data 28.08.2011 - 19:39
fonte
0

Avrai voglia di fare qualcosa che possa funzionare dalla riga di comando. La programmazione della GUI in C è un grosso problema nel culo, anche con un framework GUI buono .

Il mio solito suggerimento per una pratica esperienza di apprendimento C è stato un elenco di contatti o un'altra semplice applicazione per la gestione dei dati. Ciò coprirà la maggior parte dei bit importanti (I / O, gestione della memoria, elaborazione del testo, ecc.) E non sarà necessario utilizzare nulla al di fuori della libreria C standard per realizzarlo. C non ha alcun supporto integrato per grafica, networking, audio o altro 1 , quindi per la tua prima incursione nella programmazione C è meglio evitare tutto ciò che fa affidamento su questo genere di cose.

C può essere utilizzato per la programmazione generica; devi solo abbassare leggermente le tue aspettative (immagina che sia il 1983 e che tu sia seduto di fronte a un VT52 collegato a un VAX 11/750, e sarai nella giusta mentalità).

Ricorda solo che C non ha guardie della lama e non ti impedirà di fare qualcosa di stupido. La definizione della lingua è un po 'allentata in alcuni punti, e ci sono alcune operazioni che non sono illegali in quanto tali, ma non sono nemmeno ben definite.

1 - L'ultima revisione (2011) dello standard di lingua ha aggiunto il supporto integrato per il threading
risposta data 30.05.2012 - 15:43
fonte
0

Raccomando Project Euler . L'ho usato per migliorare il mio C ++ ed è fantastico. È fantastico perché ogni problema è una piccola operazione che potrebbe richiedere meno di un'ora per completare (almeno i primi).

Avrai bisogno di un profiler e di un libro sull'ottimizzazione del codice per la velocità. Assicurati di rispettare la regola del 1 minuto: devi ottenere la risposta entro 1 minuto.

    
risposta data 30.05.2012 - 17:25
fonte
0

Se sei GIÀ un programmatore, e SOLO bisogno di imparare C, e non preoccuparti di imparare una versione più vecchia della lingua (il nucleo è ancora più o meno lo stesso), quindi Leendert Ammeraal "C per programmatori" non può essere battuto. Lavora attraverso di esso, dall'inizio alla fine.

    
risposta data 30.05.2012 - 18:29
fonte

Leggi altre domande sui tag