C-Programmierung im Jahr 2011 [geschlossen]


19

Vor vielen Monden habe ich meinen Lebensunterhalt mit C-Code verdient, hauptsächlich während ich einen POP3-Server unterhielt, der eine Vielzahl von Betriebssystemen (Linux, * BSD, HPUX, VMS ...) unterstützte.

Ich plane, den Rost von meinen C-Kenntnissen zu entfernen und etwas über die Sprachimplementierung zu lernen, indem ich ein einfaches FORTH in C programmiere.

Aber ich frage mich, wie (oder ob?) Sich die Dinge in der C-Welt seit 2000 geändert haben. Wenn ich an C denke, denke ich ...

  1. comp.lang.c
  2. ANSI C wo immer möglich (aber C89 als C99 wird nicht so häufig unterstützt)
  3. gcc -Wall -ansi -pedantic anstelle von statischen Analyse-Tools
  4. Emacs
  5. Ctags
  6. Autoconf + make (und siehe Punkt 2 für VMS, HP-UX usw. Güte)

Kann mir jemand, der in den letzten elf Jahren in C geschrieben hat, mitteilen, was sich im Laufe der Jahre geändert hat (wenn überhaupt ;-))?

(In anderen Nachrichten, heiliger Mist, mache ich das seit mehr als einem Jahrzehnt).



3
Nun, es gibt vi statt emacs, aber ich werde nicht dorthin gehen. Es würde mich wundern, wenn noch jemand auf comp.lang.c schreibt und selbst der verschleierte C-Wettbewerb stagniert ( www0.us.ioccc.org/main.html ). Traurige Zeiten - der nächste neue Wettbewerb ist für verschleierte Buchstabenfolgen, die eine Textnachricht ausdrücken, lol.
Jay Elston

Antworten:


10

Es fällt mir wirklich schwer, an eine Zeit zurück zu denken wie "Wow, wie war C-Programmierung vor 10 Jahren?", Aber ich kann über einige Dinge sprechen, von denen ich weiß, dass ich sie anders mache.

  • Während Sie normalerweise immer noch jemanden wie Peter Seebach auf comp.lang.c zur Hilfe rufen können, wenn Sie vermuten, dass es sich um einen sprachbezogenen Fehler handelt, erhalten die meisten, wenn nicht alle C-Programmierfragen außergewöhnliche Antworten auf Stack Overflow.

  • Die statische Analyse ist immer noch schmerzhaft. Splint (zumindest soweit ich weiß) kommt mit C99 nicht so gut zurecht, es ist immer noch schwierig, Coverage-Diagramme zu visualisieren. GCC-Warnungen haben sich erheblich verbessert (in Anführungszeichen, da dies davon abhängt, wen Sie fragen).

  • Valgrind ist der Heilige aller Speicherfehlerprüfer und weist Sie normalerweise auf Probleme in Ihrem Code hin, die kein statisches Analyse-Tool finden würde / konnte. Es ist nicht 100% perfekt, aber ich denke nicht, dass es sein könnte. Ich muss heutzutage sehr selten GDB anfassen, was mir (nichts Persönliches) recht ist. Das Valgrind Massif Tool ist auch ein sehr guter Heap-Profiler.

  • Es gibt immer neue Erweiterungen in GCC, von denen einige subtil sind. Es ist also eine gute Idee, wenn Portabilität ein großes Anliegen ist. Für den unerfahrenen Programmierer ist es manchmal einfach, Erweiterungen mit "versteckten" Sprachfunktionen zu verwechseln.

  • CCAN ist aufgetaucht (denken Sie an CPAN, aber an C) und fängt an zu starten. Es gibt dort eine Menge nützlicher Edelsteine, einschließlich einer Anpassung von TAP, einem großartigen Testwerkzeug. Strings in C sind immer noch schlecht, aber die Anzahl und Qualität der Bibliotheken, die bei der Bewältigung dieser Probleme helfen, ist in den letzten zehn Jahren sicherlich gestiegen.

  • SCons und CMake werden bei der Build-Konfiguration immer beliebter. Autoconf / Automake / Libtool sind immer noch weit verbreitet, aber viele Leute fühlen sich durch M4 etwas eingeschränkt. Wenn Sie dieses System verwenden möchten, ist das Autoconf-Makroarchiv immer noch aktiv und in Ordnung.

  • Es gibt heute offensichtlich mehr Editoren. Ich habe noch keine "IDE" gefunden, die mir bei der Arbeit mit C nicht in die Quere gekommen ist, aber das liegt wahrscheinlich daran, dass ich der Einfachheit halber eine alte Sanka-Trinkevangelistin bin.

Insgesamt würde ich jedoch nicht sagen, dass das Leben (was C angeht) sich sogar grundlegend von dem vor 10 Jahren unterscheidet. Aber in vielerlei Hinsicht ist es tatsächlich ein bisschen einfacher. Es ist jedoch schwierig, dies den Werkzeugen und nicht der Erfahrung zuzuschreiben.


15

glib könnte die "neue Standardbibliothek" sein. Es bietet viel von dem, was viele vom Standard vermissen - plattformunabhängiges Threading und Networking, Container-Datenstrukturen usw. Natürlich ist es nicht überall anwendbar, aber wenn Sie es verwenden können, spart es viel Zeit.


Ich glaube, Sie sind verwechselt mit der GNU C Library (GLibC)
Lekensteyn

7
Nein, ich bin nicht verwirrt.
Zvrba

1
Dies ist eine absolut gültige Antwort, ich bin mir nicht sicher, warum sie abgelehnt wurde. glib entstand, weil viele von ihnen mit Ulrich Drepper frustriert waren und wie „behütet“ glibc ist.
Tim Post

1
Glib ist jetzt jedoch vollständig von GNOME entkoppelt. Ich streite nicht über die Assoziation, nur dass Sie in der Praxis GNOME und sogar GTK + völlig ignorieren können. Es gibt (viele?) Kommandozeilen- und nicht interaktive Programme.
Detly

3
Ich nenne glib gerne "The STL of C"
Cercerilla

4
  1. StackOverflow ;)
  2. Ich verwende C hauptsächlich zum Schreiben von Firmware für die Mikrocontroller von Microchip, und da deren Compiler auf GCC basiert, verwende ich C99 (aber ich bin nicht verrückt nach den zusätzlichen Funktionen, hauptsächlich, um den Umfang von Schleifenvariablen und dynamischen Arrays auf dem Stack einzuschränken). Wenn ich Python-Erweiterungen schreibe, halte ich mich an C89, falls jemand es mit MSVC kompilieren muss. Ich weiß nicht, was alle anderen benutzen.
  3. Splint (Arbeiten auf C89, C99 nicht) und statischen Analysator Clang - obwohl, da sie beide auf dem Makro-schweren Firmware - Code Drossel, ich habe keinerkeinekeines haben massive Menge an Erfahrung mit ihnen. Tatsächlich ist ein Großteil von LLVMs Sachen für einen C-Geek ziemlich interessant.
  4. Okay, das ist nur ein heiliger Kriegsköder: P
  5. Ich habe noch nie Ctags benutzt, aber ich bin ein Teil von Doxygen.
  6. Gott, ich hasse Autoconf. Ich hasse es so sehr. Ich habe es noch nie geschafft, einen Autoconf-Schlammballen von Grund auf neu herzustellen. Wenn ein Projekt bereits eines hätte, würde ich am Ende einfach alles, was schon da ist, verfälschen. Wenn ich etwas Neues schreibe, schimpfe ich und suche nach Alternativen, obwohl ich verdammt bin, wenn ich eine gefunden habe, bei der ich bleiben würde. Das letzte Mal, als ich diesen Zyklus durchlief, entschied ich mich für SCons, die ich wieder verwenden könnte.

1
Ich würde auch Cppcheck für die statische Analyse vorschlagen .
Greg Hewgill

10
zu Punkt 6: "Ich habe neulich ein Buch mit dem Titel 'Die Gnu Autotools' gesehen und dachte 'Mist ja!' bis mir klar wurde, dass der titel auf deutsch war ".
Cercerilla

2

2) und 3) haben sich geändert. C99 ist Mainstream, C90 wird immer veralteter. gcc -Wall -std=c99 -pedantic.

Abgesehen davon sind die beiden bemerkenswertesten Änderungen, die in anderen Antworten noch nicht angesprochen wurden:

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

1

Die Programmiersprache C hat es in der letzten Studie / Umfrage von Dr. Dobb zu den Top 2 oder 3 Programmiersprachen im Journal geschafft.

Für die Implementierung einer Sprache wird C verwendet, um eine neue Sprache zu implementieren, die bei Google erstellt wird, und zwar Go (golang.org).

Ich bin Cs Usenet-Gruppe in den letzten Jahren nicht gefolgt. Ich besuche seinen Freenode-IRC-Kanal oft. Es ist aktiv und wird von vielen frequentiert.

Neue Programme werden in C geschrieben, aber sie erhalten nicht die Publizität, die sie hätten, wenn dieses Jahr beispielsweise 1999 gewesen wäre.

Dies sind Dinge, die in den Vordergrund rücken. Es könnte noch viel mehr geben, aber ich hoffe, Sie sind mit Ihrem Programmierer-Hut in Kontakt geblieben, obwohl Sie das C-Modell des Hutes möglicherweise nicht besucht haben :)


0

Ich denke, die C99-Unterstützung ist besser als Sie vermuten. Visual Studio unterstützt es nicht, aber jeder andere Compiler, den ich mir vorstellen kann, unterstützt es (mit vielleicht ein paar Auslassungen hier und da). Wenn Sie keine Kompatibilität mit VS benötigen, würde ich sagen, gehen Sie mit C99, da es viel angenehmer zu schreiben ist als C89 IMHO.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.