Programmazione C nel 2011 [chiuso]


19

Molte lune fa ho tagliato il codice C per vivere, principalmente mantenendo un server POP3 che supportava una vasta gamma di sistemi operativi (Linux, * BSD, HPUX, VMS ...).

Sto programmando di smorzare le mie abilità in C e imparare qualcosa sull'implementazione del linguaggio codificando un semplice FORTH in C.

Ma mi chiedo come (o se?) Le cose sono cambiate nel mondo C dal 2000. Quando penso a C, penso ...

  1. comp.lang.c
  2. ANSI C ove possibile (ma C89 come C99 non è così ampiamente supportato)
  3. gcc -Wall -ansi -pedantic al posto degli strumenti di analisi statica
  4. Emacs
  5. ctags
  6. Autoconf + make (e vedi il punto 2 per VMS, HP-UX ecc. Bontà)

Qualcuno che ha scritto in C negli ultimi undici anni può farmi sapere cosa (se non altro ;-)) è cambiato nel corso degli anni?

(In altre notizie, merda santa, lo faccio da più di un decennio).



3
Bene, c'è vi invece di emacs, ma non ci andrò. Sarei sorpreso se qualcuno pubblica ancora su comp.lang.c, e anche il contestato offuscato C è stagnante ( www0.us.ioccc.org/main.html ). Tempi tristi: il prossimo nuovo concorso è per stringhe di lettere offuscate che spiegano qualche frase di messaggio di testo, lol.
Jay Elston,

Risposte:


10

È davvero difficile per me pensare indietro nel tempo come "Wow, com'era la programmazione in C 10 anni fa?", Ma posso parlare di alcune cose che so che sto facendo diversamente.

  • Mentre di solito puoi ancora convocare qualcuno come Peter Seebach su comp.lang.c per aiuto su un bug particolarmente sciocco che sospetti possa essere legato al linguaggio, la maggior parte se non tutte le domande di programmazione C ottengono risposte eccezionali su Stack Overflow.

  • L'analisi statica è ancora piuttosto dolorosa. Splint (almeno per quanto ne so) non si occupa così bene di C99, i grafici di copertura sono ancora un po 'difficili da visualizzare. Gli avvisi GCC sono "migliorati" un po '(tra virgolette perché dipende da chi chiedi).

  • Valgrind è il santo di tutti i controllori di errori di memoria e di solito ti indica problemi nel tuo codice che nessuno strumento di analisi statica potrebbe / potrebbe trovare. Non è perfetto al 100%, ma non credo che potrebbe essere. Di rado devo toccare GDB in questi giorni, il che (niente di personale) va bene per me. Lo strumento del massiccio di Valgrind è anche un profilatore di heap davvero piacevole.

  • Ci sono sempre nuove estensioni in GCC, alcune sottili , così formali sono una buona idea se la portabilità è una grande preoccupazione. Per il programmatore principiante / arrugginito, a volte è facile confondere le estensioni con le funzionalità del linguaggio "nascosto".

  • CCAN è emerso (pensa a CPAN, ma per C) e sta iniziando a decollare. Ci sono molte gemme utili lì, incluso un adattamento di TAP che è un fantastico strumento di test. Le stringhe in C fanno ancora schifo, ma il numero e la qualità delle biblioteche per aiutare a gestirle sono sicuramente aumentate negli ultimi dieci anni.

  • SCons e CMake stanno crescendo in popolarità per la configurazione della build. Autoconf / Automake / Libtool sono ancora ampiamente utilizzati, ma molte persone si sentono un po 'troppo limitate da M4. Tuttavia, se questo è il sistema che ti piace usare, l'archivio macro di Autoconf è ancora vivo e vegeto.

  • Oggi ci sono ovviamente più editor disponibili. Devo ancora trovare un "IDE" che non mi ostacola quando lavoro con C, ma probabilmente perché sono un vecchio, ingenuo, Sanka che beve evangelista per semplicità.

Nel complesso, tuttavia, non direi che la vita (per quanto riguarda la C) sia persino molto diversa da quella di 10 anni fa. Ma, in molti modi, è in realtà un po 'più facile. Tuttavia, è difficile attribuire ciò agli strumenti rispetto all'esperienza.


15

glib potrebbe essere la "nuova libreria standard". Offre gran parte di ciò che molti ritengono essere fuori dallo standard: threading e networking indipendenti dalla piattaforma, strutture di dati container, ecc. Naturalmente, non è applicabile ovunque, ma se puoi usarlo, risparmia molto tempo.


Penso che tu sia confuso con la GNU C Library (GLibC)
Lekensteyn,

7
No, non sono confuso.
zvrba,

1
Questa è una risposta perfettamente valida, non sono sicuro del perché sia ​​stata votata verso il basso. glib è nato da molti frustrati da Ulrich Drepper e da quanto sia 'custodito'.
Tim Post

1
Tuttavia, Glib è completamente disaccoppiato da GNOME. Non sto discutendo dell'associazione, solo che in termini pratici puoi ignorare completamente GNOME e persino GTK +. Ci sono (molti?) Riga di comando e programmi non interattivi scritti in esso.
detly

3
Mi piace chiamare glib "The STL of C"
Cercerilla,

4
  1. StackOverflow ;)
  2. Uso C principalmente per la scrittura di firmware per i microcontrollori di Microchip e poiché il loro compilatore è basato su GCC, utilizzo C99 (ma non impazzisco con le funzionalità extra, principalmente per limitare l'ambito delle variabili di loop e degli array dinamici nello stack). Quando scrivo estensioni Python, mi attengo a C89 nel caso in cui qualcuno debba compilarlo con MSVC. Non so cosa usano tutti gli altri.
  3. Splint (funziona su C89, non su C99) e sull'analizzatore statico di Clang - sebbene, dato che entrambi soffocano sul codice del firmware macro-pesante, non ho una grande esperienza con loro. In realtà, molte delle cose di LLVM sono piuttosto interessanti per un fanatico di C.
  4. Ok, questa è solo un'esca da guerra santa: P
  5. Non ho mai usato Ctag, ma sono parziale di Doxygen.
  6. Dio odio Autoconf. Lo odio così tanto. Non sono mai riuscito a creare da zero una palla di fango di Autoconf. Se un progetto ne avesse già realizzato uno, finirei semplicemente per bastardare qualunque cosa sia già lì. Se sto scrivendo qualcosa di nuovo, cerco e rave e cerco alternative, anche se sono dannato se ne trovassi uno con cui mi atterrei. L'ultima volta che ho attraversato questo ciclo, ho optato per SCons, che avrei potuto usare di nuovo.

1
Vorrei anche suggerire Cppcheck per l'analisi statica.
Greg Hewgill,

10
per quanto riguarda il punto numero 6: "L'altro giorno ho visto un libro intitolato" Die Gnu Autotools ", stavo pensando" Diamine, sì! " fino a quando ho capito che il titolo era in tedesco ".
Cercerilla,

2

2) e 3) sono cambiati. C99 è mainstream, C90 sta diventando sempre più obsoleto. gcc -Wall -std=c99 -pedantic.

A parte questo, i due cambiamenti più importanti non già affrontati in altre risposte sono:

  • C11. ISO 9899: 2011.
  • MISRA-C: 2004.

1

Il linguaggio di programmazione C è arrivato ai primi 2 o 3 linguaggi di programmazione sul diario del dottor Dobb nel suo studio / sondaggio più recente.

Per quanto riguarda l'implementazione di un linguaggio, C viene utilizzato per implementare un nuovo linguaggio che viene creato su Google, chiamato Go (golang.org).

Non ho seguito il gruppo usenet di C negli ultimi anni. Visito spesso il suo canale IRC Freenode. È attivo e frequentato da molti.

Nuovi programmi vengono scritti in C, ma non ottengono la pubblicità come avrebbero avuto quest'anno, diciamo, nel 1999.

Questi sono qualcosa che viene in cima alla mente. Potrebbero essercene molti di più, ma spero che tu sia rimasto in contatto con il tuo cappello da programmatore, anche se potresti non aver frequentato il modello C del cappello :)


0

Penso che il supporto C99 sia migliore di quanto sospetti. Visual Studio non lo supporta, ma ogni altro compilatore che mi viene in mente lo supporta (con, forse qualche omissione qua e là). Se non hai bisogno di compatibilità con VS, allora direi con C99, poiché è molto più piacevole scrivere di C89 IMHO.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.