Progetto interessante per imparare il C?

Ho qualche conoscenza di base di C (e un po ‘ più di C++). Ho una copia di K&R, e voglio usarlo per aiutarmi a scavare più a fondo nel linguaggio. Che cosa è una buona idea che comportano l’utilizzo di più di C caratteristiche e libreria standard? Inoltre, cosa importante, le differenze tra C89 e C99 dovrei essere a conoscenza?

EDIT: Dimenticato di dire, questo dovrebbe essere il più fattibile per un principiante. Non sto chiedendo per un tutorial di programmazione; piuttosto, qualcosa a metà scala. Capisco che OS roba è uno dei C scopo principale, ma non sarebbe troppo complicato?

Inoltre, di leggere e rispondere alle domande è sempre una buona idea, ma voglio avere un po ‘ di pratica, fare un programma che fa quello che deve fare.

InformationsquelleAutor Javier | 2009-08-10



15 Replies
  1. 62

    Implementazione di un linguaggio di programmazione. Questo non deve essere terribilmente difficile – ho fatto la lingua che non deve essere nominato – ma ti costringe a imparare un sacco di parti importanti di C. Se non si desidera scrivere un lexer e/o parser, è possibile utilizzare lex/flex e yacc/bison, ma se pensi che si potrebbe desiderare di iniziare con un po ‘ più piccola del progetto.

    Prendere qualche programma si dispone di un più alto livello di lingua e riscrivere. Se si dispone di un Perl/Python/Ruby/script Bash che si utilizza un sacco, e si nota un tempo di ritardo, mentre è in funzione, riscrivere in C con un focus sulle performance.

    A mio parere, tuttavia, che se si sta scrivendo un programma per imparare il C, è meglio di reinventare la ruota. Il linguaggio di programmazione C è e la regolazione della ruota, e se solo imparare il C utilizzando le librerie che astrae la ruota per voi, beh, siete davvero di apprendimento C. può essere più veloce e quando si sta lavorando su un progetto in C, con tutti i mezzi, non reinventare la ruota, ma se si sta facendo questo per imparare, quindi con tutti i mezzi, imparare la ruota funziona.

  2. 15

    Vorrei consigliamo di lavorare con questi: http://projecteuler.net/. Naturalmente a volte aiuta a fare alcuni di questi in modo inefficiente in C, per ottenere un senso di come il tempo la forza bruta prende. Poi provate a venire con un metodo più intelligente e vedere la bellezza di C ben fatto!

  3. 7

    Un interprete per una semplice grammatica della lingua. Non lexer/generatori di parser deve essere utilizzato ovviamente per renderlo interessante.

  4. 5

    Costruire un gioco di scacchi. Questo può essere abbastanza banale come si può fare anche con una normale console. Si ottiene per implementare un po ‘ di logica, l’uso di strutture di dati, lavorare con i puntatori, ecc. Memorizzare il punteggio, in modo che si arriva a lavorare con tenacia.

  5. 4

    Hardware (microprocessore embedded system) e il sistema operativo del kernel codici?

    • E ‘ molto divertente con mcu:s, Atmel AVR:s sono piacevoli.
    • PIC18F sono troppo divertente per me.
  6. 4

    Quando ho voglia di imparare una nuova lingua, ho sempre qualche utility che mi sarebbe utile e di scrittura. Trovo che la scrittura di un programma vero e proprio che sta per essere utilizzato mi insegna più semplicemente prova di concetti.

    Per esempio, si potrebbe scrivere un programma che, a partire da una directory specificata sarà trasversale verso il basso la costruzione di una lista di tutti i file e fare qualcosa con loro. Come dare una semplice lista di tutti i file di dimensione superiore a quella specificata. Poi di capire come aggiungere i filtri in modo che, quando completo, è possibile utilizzare per ripulire la directory. È possibile cercare la parola “backup” o i file che contengono tmp. Non dimenticare di avere almeno una funzione che passa un puntatore a un puntatore per ottenere una buona sensazione per loro.

    Sì, so che si può fare come una sceneggiatura, ma si può anche personalizzare per qualcosa di specifico.

  7. 2

    Il mio programma preferito per attuare in situazioni come questa è una Regex matching program, che utilizza bel sintassi di base, ma utilizza un sacco di basso livello, le caratteristiche di una lingua (e dato che C è abbastanza linguaggio di basso livello, che la maggior parte di loro).

  8. 1

    Fare qualche kernel hacking

    sudo apt-get install git-core
    git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6

    Io uso ubuntu, quindi ho fatto un apt-get, io uso gentoo troppo, il comando c’è # emerge dev-util/git

  9. 1

    Una semplice applicazione di database (lista di contatti, film, album, etc.) potrebbe anche essere un buon progetto; si tratterebbe di I/O di file, interattiva di I/O, gestione della memoria, abbastanza carnoso, strutture di dati, etc.

  10. 0

    Per differenza in lingue non wory per molto. Non è molto, ma ancora. (sto scrivendo c per 2 anni, ma ancora non sa cosa stadard c’è, se ho unsuported compilatore ci vogliono solo pochi minuti per correggere il codice)

    Una delle cosa più frustrante che può succedere è di solito la definizione dei valori nel mezzo di un codice come in for(int i;i<2;i++); loop che è considerato solo c++ specifica. Che era quello che stavo affrontando la pentecoste. Nel cross compilazione troverete altri cosa molto più frustraiting standard di differenza.

    Per partire in c suggerisco di apprendimento algorhitms e sistemi operativi o di un sistema embedded (c da lontano ancora la lingua più diffusa a basso/medio termine di sistemi embedded)

    Avere un po di pace di hardware, per esempio, da microchip, atmel o freescaleand e verificare la loro embedded real time (RTOS) di supporto.

    • for(int i = 0; i < x; i++) è valido in C99, ma non C89, ma GCC piange a voi, se lo si utilizza al di fuori di C99 modalità, quindi non la uso.
    • Io lo sapevo. Non ha mai lavorato per me. Grazie per questo.
  11. 0

    Il 2006 ICFP Concorso problema è stato incredibilmente divertente. La prima parte, l’implementazione della macchina virtuale, è un piccolo problema che proprio il tipo di cosa C è ancora appropriato per. Non ti insegnano molto di libreria standard, però.

Lascia un commento