Cosa dovrei fare e sapere prima di iniziare a scrivere C? [chiuso]

1

Ho una laurea in CS e ho imparato a conoscere Java e OCaml. Java era usato come introduzione e nella maggior parte delle CS classificate, tranne quelle teoriche. OCaml era parte dell'apprendimento di un diverso paradigma di programmazione. Dal momento che OCaml non era una voce di successo nel mio CV, sono diventato un programmatore Java migliore. Inoltre, la maggior parte dei lavori sono per programmatori Java. Più tardi ho imparato Golang.

Conosco le semplificazioni fornite da Java, ovvero la garbage collection. So anche che C non fa la garbage collection e devi sapere quando allocare e quando liberare la memoria. Ma durante la mia educazione non mi è mai stato insegnato a pensare in questo modo. Non abbiamo mai imparato algoritmi sotto l'aspetto della memoria. Mi sento come se mi fossi perso qualcosa.

Quindi la mia domanda è: quanto devo scavare in profondità, prima di poter iniziare a scrivere codice C passabile, senza che io abbia messo ostacoli sulla mia strada, a causa del mio codice crufty e del profondo fraintendimento di questioni rilevanti?

    
posta Kiril 26.07.2014 - 19:24
fonte

4 risposte

3

C'è una risposta molto lunga sopra, ne darò una breve.

Ho iniziato anch'io in Java e ho iniziato a c per una buona base per il resto della mia carriera di programmatore.

Non ci vuole troppo tempo per iniziare a scrivere un buon codice. Fortunatamente ho avuto un professore che mi aiutava.

Più importante

Puntatori puntatori puntatori

** allocare e liberare memoria **

Dopo aver compreso bene questi concetti, dovresti essere in grado di decollare.

    
risposta data 26.07.2014 - 19:55
fonte
3

Se non è stato già fatto, leggere " The C Programming Language " e lavorare attraverso gli esempi. Ho imparato C attraverso questo libro (proveniente da FORTRAN). Dal momento che si è già a conoscenza dei problemi e le insidie di gestione della memoria in stile C, sei già fuori ad un buon inizio.

Un principio di programmazione che dovresti sempre seguire è non lasciare mai un puntatore "ciondolante" (un puntatore che fa riferimento alla memoria disallineata) - inizializza sempre i puntatori su null, e quando la memoria viene liberata, imposta sempre il puntatore associato su null . Un controllo per null può quindi essere utilizzato come test per verificare se la memoria è stata allocata.

Per semplificare l'evitamento dei puntatori penzolanti, un altro principio è la simmetria. Nella programmazione orientata agli oggetti (C ++, ad esempio) si esprime come: colui che assegna la memoria è responsabile della sua liberazione. Questo è tipicamente implementato in classi tali che ogni metodo che "nuovo" s un oggetto abbia un metodo di contropartita nella stessa classe responsabile di "cancellare" ciò che era "nuovo" d.

In C, il principio è rispettato implementando coppie di funzioni in cui viene utilizzata la memoria allocata; per ogni funzione che esegue allocazione (s), non ci dovrebbe essere un'altra funzione che svolge "pulizia" -. liberare la memoria allocata

    
risposta data 26.07.2014 - 20:04
fonte
2

Il codice passabile in qualsiasi lingua dimostra il know-how su come la lingua può essere utilizzata per scrivere codice leggibile nel grande e nel piccolo. Che ovviamente richiede pratica! In particolare, mi aspetto che tu sappia come:

  1. Suddividi il codice in blocchi modulari
  2. Scrivi un codice idiomatico per quella lingua
  3. La libreria standard per questa lingua
  4. Scopri quali librerie esistono per le attività più comuni
  5. Best practice per scrivere librerie
  6. Crea sistemi se applicabili
  7. Come eseguire test automatici del tuo codice

Specificamente per C, mi aspetto una conoscenza di:

  1. Puntatori
  2. Come una matrice è un puntatore è una matrice (sorta di)
  3. Come una stringa C è un tipo speciale di array che richiede un'attenzione speciale
  4. Allocazione manuale della memoria (e, soprattutto, deallocazione) - e idiomi per la gestione dello stesso
  5. Come funziona lo stack e come funziona l'heap (valore basato su semantica basata su riferimento)
  6. Comfort building / utilizzo delle tue strutture dati
  7. Probabilmente ti senti a tuo agio con la piattaforma su cui stai scrivendo (posix o qualsiasi altra cosa ti interessi)

Ma vuoi essere in grado di fare tutto questo a meno che tu non scriva un codice veramente brutto da molto tempo e faccia molti errori! Vedi anche Norvig: Ti insegna a programmare in dieci anni .

    
risposta data 26.07.2014 - 19:48
fonte
0

Penso che imparare C sia una buona idea, perché molti linguaggi sono basati su C, capire come funziona la memoria può essere solo buono, e talvolta fare in modo che C risolva il problema può essere utile.

Il buon primo modo che puoi fare, è leggere il linguaggio di programmazione C, alcuni danno una conoscenza molto solida. Dopo puoi trovare un fantastico software gratuito scrivere in C e contribuire.

    
risposta data 26.07.2014 - 20:38
fonte

Leggi altre domande sui tag