Ich muss zugeben, dass ich immer noch Pseudo-C89-Code schreibe (nicht vollständig C99-konform), hauptsächlich wegen Microsoft. Ich verlasse mich stark auf MSVC für die Windows-Seite und sie sind immer noch nicht vollständig C99-kompatibel. Stattdessen liegt der Schwerpunkt auf C ++ 17 und höher.
Darüber hinaus arbeite ich an C SDKs, für die viele Plugin-Entwickler MSVC für ihre Plugin-Entwicklung verwenden, und an einigen, die immer noch MSVC 2010 sind. Daher gibt es immer noch beliebte Compiler, die auf Plattformen weit verbreitet sind, die nicht so exotisch sind (sofern Sie dies nicht in Betracht ziehen) Windows (exotisch), die C99 noch nicht vollständig implementieren. Wenn Sie eine breite Kompatibilität mit den meisten Compilern anstreben (was einer der Hauptgründe dafür ist, dass das SDK in C und nicht in C ++ geschrieben ist), gibt es immer noch eine Reihe weit verbreiteter Compiler (zumindest MSVC), die in der heutigen Zeit zurückliegen wenn es um C-Unterstützung geht. Es ist fast ein paar Jahrzehnte her, seit C99 und wir haben immer noch keine VLAs, z. B. in MSVC AFAIK. .
Und so gibt es leider immer noch neue Compiler, die eigentlich ganz gut mit guten Optimierern und Debuggern umgehen können, die noch nicht einmal vollständig C99-konform sind. Natürlich, wenn es das nicht gäbe, würde ich über C11 springen.
Neben der Quellkompatibilität mit Plugins und MSVC gibt es auch Interop mit anderen Sprachen. Einige andere Sprachen verwenden das SDK über ein FFI, und einige dieser FFIs verstehen nur C89. Sie verstehen möglicherweise nicht bool
oder nur _Bool
als einfaches Beispiel, wenn sie Funktionen aus einer Dylib importieren, und verstehen beispielsweise nur int
.
Ja, das Argument dafür ist die Portabilität, aber die Frage ist, ob es tatsächlich nicht-hypothetische Systeme gibt, die nur einen C89-Compiler verwenden können, aber neue Softwareverteilungen kompilieren. Wenn ich ein neues C-Projekt starten würde, wie würde ich entscheiden, ob die Einhaltung von C89 die Anzahl der potenziellen Benutzer erhöhen könnte?
Blrfl
Ich habe es gerade bemerkt, aber die Art von Echo , der Produktivitätsgewinn durch die Verwendung von C99 und C11 ist in meinem Fall nicht so enorm, während der Verlust der Möglichkeit, dass Benutzer ihre Plugins in MSVC schreiben können, enorme Kosten verursachen kann (insbesondere, da das Produkt, das ich verwende on hat mit Abstand den größten Marktanteil auf der Windows-Seite, und der durchschnittliche Benutzer kauft und lädt häufig viele Plugins von Drittanbietern herunter. Die Art von Produkt, an dem ich arbeite, liegt fast in der Mitte zwischen einer Entwicklungsumgebung für Programmierer / Skripter und einem Benutzer-Endprodukt für Künstler, da so viele Leute neue Dinge darüber entwickeln möchten, um neue Funktionen zu ermöglichen und Spezialeffekte von a zu erzielen nette Leute haben noch nicht gesehen. In meinem Fall war es also eigentlich eine recht einfache Entscheidung, C89 zumindest für das SDK zu favorisieren.
Ich nehme an, Sie müssen sich die Compiler um Sie herum ansehen und versuchen, Ihre Zielgruppe herauszufinden. Wenn Sie keine Plug-in-Architektur für Windows entwickeln oder keine eingebettete Programmierung ausführen oder nicht versuchen, ein Software Development Kit zu erstellen, das von den unterschiedlichsten Compilern und Sprachen verwendet werden kann, ist C99 + auf jeden Fall einfacher zu erreichen Weg. Überlegen Sie auch, wie viel Produktivitätssteigerung Sie ab C99 erzielen. Ich profitiere nicht so sehr von Dingen wie VLAs, da ich mich auf ausreichend einfache Methoden stütze, um den Stapel zu verwenden, wenn die Daten passen, und ansonsten einen Heapspeicher zu erstellen.
Aber es gibt eine ganze Reihe von Dingen, die von bekannten Compilern wie MSVC bis hin zu FFIs in anderen Sprachen hinterherhinken. Diese sind in dem Sinne cool, dass sie C-Funktionen direkt aus einer Dylib importieren und aufrufen können, aber möglicherweise auch ein bisschen hinterherhinken mal. Es gibt also viel mehr praktische geschäftliche Aspekte, die Sie je nach Ihrer Domäne berücksichtigen müssen, als lediglich ältere und standardisierte Elemente für eine bestimmte Art von Ästhetik zu bevorzugen.