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 ...
- comp.lang.c
- ANSI C wo immer möglich (aber C89 als C99 wird nicht so häufig unterstützt)
gcc -Wall -ansi -pedantic
anstelle von statischen Analyse-Tools- Emacs
- Ctags
- 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).
programming-languages
c
language-agnostic
Duncan Bayne
quelle
quelle
Antworten:
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.
quelle
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.
quelle
quelle
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:
quelle
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 :)
quelle
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.
quelle